2016-09-07 39 views
1

我已經嘗試了一切只寫一個字節到Python中的文件。我如何寫一個字節到Python中的二進制文件

i=10 
fh.write(six.int2byte(i)) 

將輸出 '0×00 0X0A'

fh.write(struct.pack('i', i)) 

將輸出 '0×00 0X0A 0×00 0×00'

我不明白爲什麼會這樣很難做到。

+2

你是怎麼打開'fh'的? – RemcoGerlich

+0

你在說[文件對象](https://docs.python.org/3/glossary.html#term-file-object),[文件描述符](https://docs.python.org/ 3/library/os.html#file-descriptor-operations)或實際的[Windows上的文件句柄](https://msdn.microsoft.com/en-us/library/windows/desktop/aa364225(v = vs.85 )的.aspx)? – janbrohl

回答

5

您只需建立一個bytes對象與價值:

with open('my_file', 'wb') as f: 
    f.write(bytes([10])) 

這隻在python3。如果您將bytes替換爲bytearray它可以在python2和3中使用。

此外:請記住以二進制模式打開文件以向其寫入字節。

+0

在python2.7中生成:0x31 0x5b 0x3d 0x30。與bytearray它生成0x00 0x0a – reza

+0

我把它收回 - 我使用hexdump -x來查看填充額外的0x00的文件。字節陣列起作用。 – reza

+0

字節/ bytearray取值從0到255(無符號) - 所以不要放負數 – janbrohl

0

struct.pack("=b",i)(有符號)和struct.pack("=B",i)(無符號)將整數作爲單個字節打包,您可以在docs for struct中看到。 ("="是用於使用標準尺寸和忽略對齊 - 以防萬一)所以你可以做

import struct 
i=10 
with open('binfile', 'wb') as f: 
    f.write(struct.pack("=B",i)) 
+1

爲什麼你downvote? – janbrohl

+0

這也會產生0x00 0x0a(不管是= b還是= b選項) – reza

相關問題