Python:将numpy数组(int)写入二进制文件而不填充

时间:2016-10-04 14:14:52

标签: python python-2.7 numpy io binary

我有一个在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数组之后。

谢谢!

1 个答案:

答案 0 :(得分:1)

检查content.dtype。看起来它是np.int32,它通常是Windows上的默认整数类型。您正在编写32位整数,但后来尝试将它们读回16位整数。所以结果中的每个其他值都是0。