我有一个在Fortran中创建的二进制文件,包含整数值作为记录。我想将它们读入Python,将它们编辑为列表并将它们作为np-arrays保存回二进制文件。但是,由于某种原因,Python在文件中的每个记录之后插入一个额外的“0”。我想这就是他们所谓的“填充”,对吗?我该如何压制这个?
这是一个独立的例子:
import numpy as np
content = np.array(range(20))
# Write:
with open('D:/bin_test.dat', 'wb') as write_binary:
write_binary.writelines(content)
# Read:
with open('D:/bin_test.dat', 'rb') as read_binary:
content = np.fromfile(read_binary, dtype=np.int16)
print content
Out:
[ 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11
0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0]
如果我通过np.fromfile
读取Fortran二进制文件并将其直接保存回二进制文件,它就可以了。这就是为什么我猜这个问题发生在从list转换为numpy数组之后。
谢谢!
答案 0 :(得分:1)
检查content.dtype
。看起来它是np.int32
,它通常是Windows上的默认整数类型。您正在编写32位整数,但后来尝试将它们读回16位整数。所以结果中的每个其他值都是0。