我有一个Fortran代码,它在一个没有格式化的文件(二进制文件)中输出其数据。 我也有一个Python诊断代码,它读取该二进制数据,以便进行分析。
for ip in range(np.size(fileNames)):
f = FortranFile(fileNames[ip], 'r')
ints = f.read_record([('nx', 'i4'), ('nv', 'i4'), ('nl', 'i4'), ('nlb', 'i4')])
record = f.read_record([('xx', 'f8', (nl)), ('vv', 'f8', (nv)), ('fav', 'f8', (nv)), ('f0', 'f8', (nv+2)), ('sing_f', 'f4', (nv+2,nl+2*nlb))])
f.close()
不幸的是,我有很多数据文件,所以为了减少文件的数量,我决定将数据归档在一个tar.gz文件中。
目前,我只找到了一种从档案中读取数据的方法。为此,我从档案库中提取我需要的文件,然后用我以前的代码读取它,一旦完成,就删除它。
tar = tarfile.open(tarName, "r:gz")
tarfileNames = tar.getnames()
for ip in range(np.size(tarfileNames)):
tar.extractall(members=[x for x in tar.getmembers() if x.name in tarfileNames[ip]])
f = FortranFile(tarfileNames[ip], 'r')
ints = f.read_record([('nx', 'i4'), ('nv', 'i4'), ('nl', 'i4'), ('nlb', 'i4')])
record = f.read_record([('xx', 'f8', (nl)), ('vv', 'f8', (nv)), ('fav', 'f8', (nv)), ('f0', 'f8', (nv+2)), ('sing_f', 'f4', (nv+2,nl+2*nlb))])
f.close()