我有一个用 Fortran 创建的二进制文件,其中包含作为记录的整数值。我想将它们读入 Python,将它们编辑为列表并将它们保存回二进制文件作为 np 数组。然而,出于某种原因,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 二进制文件并将其直接保存回二进制文件,它就可以正常工作。这就是为什么我猜测从列表转换为 numpy 数组后会出现问题的原因。
谢谢!
最佳答案
检查content.dtype
。看起来像是np.int32
,这通常是Windows上的默认整数类型。您正在写入 32 位整数,但随后尝试将它们读回为 16 位整数。因此结果中的所有其他值都是 0。
关于Python:将numpy数组(int)写入二进制文件而不进行填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39854637/