2016-05-10 167 views
4

我有一个程序计算偏移量(差异),然后使用numPy将它们存储在16位无符号整数中,并且我想将此int存储到二进制文件中,因为它是二进制文件形成。即如果offset的值是05,我希望文件显示“01010000 00000000”,但不是字符串。 我写的代码是:Python:将int写入二进制文件

target = open(file_cp, 'wb') 
target.write('Entries') 
target.write('\n') 
Start = f.tell() 
while(!EOF): 
    f.read(lines) 
    Current = f.tell() 
    offset = np.uint16(Current-Start) 
    target.write(offset) 

有后f.read(系)进行一些处理,但多数民众赞成那种想法。只要偏移量小于127,代码就可以正常工作。一旦偏移量超过127,文件中会出现0xC2以及二进制数据。在文件中出现

数据如下(十六进制视图,小印度): 00 00 05 00 0E 00 17 00 20 00 3C 00 4E 00 7B 00 C2 8D 00 C2 92 00 C2 9F 00

莫非有人建议解决这个问题?

回答

0

您应该使用内置的struct模块。取而代之的是:

np.uint16(Current-Start) 

试试这个:

struct.pack('H', Current-Start) 
+0

我认为'struct.pack('H',np_uint16_instance)'与'np_uint16_instance.tostring()' – mgilson

+0

相同。这会写一个字符串到文件中,而不是我正在寻找的。我已经更新了这个问题,对不起,如果以前不清楚的话。 –

1

试试这个。

import numpy as np 
a=int(4) 
binwrite=open('testint.in','wb') 
np.array([a]).tofile(binwrite) 
binwrite.close() 

b=np.fromfile('testint.in',dtype=np.int16) 
print b[0], type(b[0]) 

输出:4类型 'numpy.int16'

我希望这是世界卫生大会,你所期待的。 适用于n> 127 但读取和写入numpy数组... binwrite = open('testint.in','ab')将让您追加更多的整数到文件。

+0

这个答案可以通过使用['with statement'](https://docs.python.org/dev/reference/compound_stmts.html#the-with-statement)来改善(这样文件总是被关闭,代码变得更加惯用/可读/更短)并作为函数打印 - 就目前而言,您的程序在当前Python版本中包含语法错误。 – phihag

+0

我在2.7上试过,对不起。 – alxg

+0

谢谢你的建议。它仍然做同样的事情。而不是4,我试着148和文件读取(十六进制视图):c2 94 00 –