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

Python:将numpy数组(int)写入二进制文件而不填充,python,python-2.7,numpy,io,binary,Python,Python 2.7,Numpy,Io,Binary,我有一个用Fortran创建的二进制文件,其中包含作为记录的整数值。我想将它们读入Python,将它们作为列表编辑,并将它们作为np数组保存回二进制。然而,出于某种原因,Python在文件中的每条记录之后插入一个额外的“0”。我猜这就是他们所谓的“填充”,对吗?如何抑制这种情况 下面是一个独立的示例: import numpy as np content = np.array(range(20)) # Write: with open('D:/bin_test.dat', 'wb') as

我有一个用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二进制文件,并直接将其保存回二进制文件,它就可以正常工作。这就是为什么我猜问题发生在从list到numpy数组的转换之后


谢谢

检查
content.dtype
。它看起来像是
np.int32
,这通常是Windows上的默认整数类型。您正在写入32位整数,但试图将其读回16位整数。因此,结果中的其他每一个值都是0。

检查
content.dtype
。它看起来像是
np.int32
,这通常是Windows上的默认整数类型。您正在写入32位整数,但试图将其读回16位整数。因此,结果中的每一个值都是0。

我没有Python 2.7(该代码在Python 2.6上不起作用),但是在Python 3.6上,如果将数据类型更改为
dtype=np.int32
,那么您的代码会执行您想要的操作。请检查
content.dtype
。它看起来像是
np.int32
,这通常是Windows上的默认整数类型。您正在写入32位整数,但试图将其读回16位整数。所以结果中的其他值都是0。有时候就这么简单……是的,我一直在尝试在Fortran中使用16位整数来节省HDD空间,但没有意识到numpy默认创建int32数组。好吧,问题解决了。非常感谢。好的,我将添加我的注释作为回答。我没有Python 2.7(并且该代码在Python 2.6上不起作用),但是在Python 3.6上,如果您将数据类型更改为
dtype=np.int32
,那么您的代码将执行您想要的操作。请检查
content.dtype
。它看起来像是
np.int32
,这通常是Windows上的默认整数类型。您正在写入32位整数,但试图将其读回16位整数。所以结果中的其他值都是0。有时候就这么简单……是的,我一直在尝试在Fortran中使用16位整数来节省HDD空间,但没有意识到numpy默认创建int32数组。好吧,问题解决了。非常感谢。好的,我将添加我的评论作为回答。