我有一些由Fortran77编写的单精度小尾数未格式化数据文件.我正在使用Python使用以下命令来读取这些文件:
import numpy as np
original_data = np.dtype('float32')
f = open(file_name,'rb')
original_data = np.fromfile(f,dtype='float32',count=-1)
f.close()
在Python中进行了一些数据处理之后,我(正在尝试)使用Python使用以下命令以原始格式将其写回:
out_file = open(output_file,"wb")
s = struct.pack('f'*len(manipulated_data), *manipulated_data)
out_file.write(s)
out_file.close()
但这似乎不起作用.有什么想法是使用Python以原始的fortran无格式格式写回数据的正确方法是什么?
问题的详细信息:
我能够从Fortran中读取包含操纵数据的最终文件.但是,我想使用软件(Paraview)可视化这些数据.为此,我将以* h5格式转换未格式化的数据文件.我可以使用h5实用程序将原始数据和经处理的数据转换为h5格式.但是,尽管Paraview可以读取从原始数据创建的* h5文件,但Paraview无法读取从操作数据创建的* h5文件.我猜翻译中有些东西正在丢失.
这就是我打开用Python在Fortran中编写的文件的方式(单精度数据):
open (in_file_id,FILE=in_file,form='unformatted',access='direct',recl=4*n*n*n)
这是我通过Fortran编写的原始未格式化数据:
open(out_file_id,FILE=out_file,form="unformatted")
这些信息足够吗?
解决方法:
您是否尝试过使用受控数据数组的.tofile方法?它将以C顺序写入数组,但能够写入纯二进制.
.tofile的文档也建议与以下内容相同:
with open(outfile, 'wb') as fout:
fout.write(manipulated_data.tostring())