Compare commits
2 Commits
2d7358c062
...
f92bd36a76
| Author | SHA1 | Date |
|---|---|---|
|
|
f92bd36a76 | |
|
|
7687d4f022 |
|
|
@ -8,7 +8,7 @@ import numpy as np
|
||||||
import ucf
|
import ucf
|
||||||
import configparser
|
import configparser
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description='Reads an ucf.tar archive, downsamples it and saves it to a new ucf.tar archive. Can be used as a pipe.')
|
parser = argparse.ArgumentParser(description='Packs UCF MPIIO data into a tar archive. The single output file is split into multiple files due to file size restrictions.')
|
||||||
parser.add_argument('indir', metavar='dirin', help='input directory')
|
parser.add_argument('indir', metavar='dirin', help='input directory')
|
||||||
parser.add_argument('iseq', metavar='iseq', help='sequence number')
|
parser.add_argument('iseq', metavar='iseq', help='sequence number')
|
||||||
parser.add_argument('base', metavar='base', help='filebase to be archived: "uvwp" or "scal"')
|
parser.add_argument('base', metavar='base', help='filebase to be archived: "uvwp" or "scal"')
|
||||||
|
|
@ -52,7 +52,7 @@ if verbose:
|
||||||
ftar = tarfile.open(name=file_out,mode='w',pax_headers=tarfile.USTAR_FORMAT)
|
ftar = tarfile.open(name=file_out,mode='w',pax_headers=tarfile.USTAR_FORMAT)
|
||||||
|
|
||||||
def transform_filename(filename,iseq):
|
def transform_filename(filename,iseq):
|
||||||
return os.path.basename(file_in).replace('_{:04d}'.format(iseq),'')
|
return os.path.basename(filename).replace('_{:04d}'.format(iseq),'')
|
||||||
|
|
||||||
# Parse parameters to construct file headers, then add it to tar
|
# Parse parameters to construct file headers, then add it to tar
|
||||||
file_in = '{}/parameters_{:04d}.asc'.format(dir_in,iseq)
|
file_in = '{}/parameters_{:04d}.asc'.format(dir_in,iseq)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import sys
|
||||||
|
import io
|
||||||
|
import os
|
||||||
|
import tarfile
|
||||||
|
import argparse
|
||||||
|
import numpy as np
|
||||||
|
import ucf
|
||||||
|
import configparser
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Unpacks an UCF tar file as MPIIO input file.')
|
||||||
|
parser.add_argument('infile', metavar='filein', help='input file')
|
||||||
|
parser.add_argument('iseq', metavar='iseq', help='sequence number')
|
||||||
|
#parser.add_argument('base', metavar='base', help='filebase to be archived: "uvwp" or "scal"')
|
||||||
|
parser.add_argument("-o", "--outdir", metavar='directory',nargs='?', default=None, help="name of the output directory", action="store")
|
||||||
|
parser.add_argument("-v", "--verbose", help="activate verbose output", action="store_true")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
file_in = args.infile
|
||||||
|
iseq = int(args.iseq)
|
||||||
|
#base = args.base
|
||||||
|
verbose = args.verbose
|
||||||
|
|
||||||
|
if args.outdir is None:
|
||||||
|
dir_out = './'
|
||||||
|
else:
|
||||||
|
dir_out = args.outdir
|
||||||
|
|
||||||
|
# Open tar file for input
|
||||||
|
ftar = tarfile.open(name=file_in,mode='r')
|
||||||
|
|
||||||
|
# Extract files
|
||||||
|
def transform_filename(filename,iseq):
|
||||||
|
return filename.replace('.','_{:04d}.'.format(iseq))
|
||||||
|
|
||||||
|
files_all = ftar.getnames()
|
||||||
|
#files_aux = ('parameters.asc','proc.bin','grid.bin','particles.bin')
|
||||||
|
files_aux = [s for s in files_all if not s.startswith('uvwp') or s.startswith('scal')]
|
||||||
|
for files in files_aux:
|
||||||
|
print(files)
|
||||||
|
ucf_bytes = ftar.extractfile(files).read()
|
||||||
|
file_out = dir_out+transform_filename(files,iseq)
|
||||||
|
fidw = open(file_out,'wb')
|
||||||
|
fidw.write(ucf_bytes)
|
||||||
|
fidw.close()
|
||||||
|
|
||||||
|
files_data = [s for s in files_all if s.startswith('uvwp') or s.startswith('scal')]
|
||||||
|
base = files_data[0].split('.')[0]
|
||||||
|
iproc = 0
|
||||||
|
file_out = dir_out+'/'+base+'_{:04d}.bin'.format(iseq)
|
||||||
|
fidw = open(file_out,'wb')
|
||||||
|
for files in files_data:
|
||||||
|
print(files)
|
||||||
|
sproc = files.split('.')[1]
|
||||||
|
if iproc!=int(sproc):
|
||||||
|
raise ValueError('Invalid file order in tar: {}, {}'.format(iproc,files))
|
||||||
|
ucf_bytes = ftar.extractfile(files).read()
|
||||||
|
if iproc==0:
|
||||||
|
fidw.write(ucf_bytes)
|
||||||
|
else:
|
||||||
|
fidw.write(ucf_bytes[64:])
|
||||||
|
iproc += 1
|
||||||
|
fidw.close()
|
||||||
|
|
||||||
|
# Close tar file
|
||||||
|
ftar.close()
|
||||||
Loading…
Reference in New Issue