我使用python 3 我試圖寫入二進制文件我使用r + b。Python寫入二進制
for bit in binary:
fileout.write(bit)
其中binary是一個包含數字的列表。 如何將它寫入二進制文件?
最終文件必須看起來像 B」 X07 \ X08 \ X07 \
感謝
我使用python 3 我試圖寫入二進制文件我使用r + b。Python寫入二進制
for bit in binary:
fileout.write(bit)
其中binary是一個包含數字的列表。 如何將它寫入二進制文件?
最終文件必須看起來像 B」 X07 \ X08 \ X07 \
感謝
當你以二進制方式打開一個文件,那麼你基本上是與bytes
類型的工作。因此,當您寫入文件時,您需要傳遞一個bytes
對象,並且當您讀取它時,會得到一個bytes
對象。相反,在文本模式下打開文件時,您正在使用str
對象。
所以,寫作「二元」實在是寫一個字節字符串:
with open(fileName, 'br+') as f:
f.write(b'\x07\x08\x07')
如果你有你想要寫爲二進制的實際整數,則可以使用bytes
函數整數序列轉換成bytes對象:
>>> lst = [7, 8, 7]
>>> bytes(lst)
b'\x07\x08\x07'
結合這一點,你可以寫整數作爲一個字節對象的序列爲二進制模式打開的文件。
由於Hyperboreus在評論中指出的,如果你想存儲任意(正)整數的方式bytes
將只接受數字0和255之間的序列,實際上適合在一個字節,即數字他們,而不必理會知道他們的確切大小(這是需要的結構),那麼你可以很容易地編寫其中最多分裂這些數字爲單獨字節的輔助函數:
def splitNumber (num):
lst = []
while num > 0:
lst.append(num & 0xFF)
num >>= 8
return lst[::-1]
bytes(splitNumber(123456789))
# b'\xabT\xa9\x8c\xeb\x1f\n\xd2'
所以,如果你有一個列表的數字,你可以輕鬆地遍歷它們並將每個文件寫入文件;如果你想在後面逐個提取數字,你可能需要添加一些東西來跟蹤哪些字節屬於哪個數字。
with open(fileName, 'br+') as f:
for number in numbers:
f.write(bytes(splitNumber(number)))
其中二進制是包含數字的列表
一個號碼都可以有一個千位和一個不同的二進制表示(字節序,寬度,1補碼,2補碼,不同精度的浮點數等)。所以首先你必須決定你想要存儲你的號碼。然後你可以使用struct模塊來做到這一點。
例如,字節序列0x3480可以解釋爲32820(little-endian unsigned short)或-32716(little-endian signed short)或13440(big-endian short)。
小例子:
#! /usr/bin/python3
import struct
binary = [1234, 5678, -9012, -3456]
with open('out.bin', 'wb') as f:
for b in binary:
f.write(struct.pack('h', b)) #or whatever format you need
with open('out.bin', 'rb') as f:
content = f.read()
for b in content:
print(b)
print(struct.unpack('hhhh', content)) #same format as above
打印
210
4
46
22
204
220
128
242
(1234, 5678, -9012, -3456)
什麼是「二進制」在這裏應該是什麼意思?你想要1s和0s? – geoffspear
[在Python中讀寫二進制文件]可能的重複(http://stackoverflow.com/questions/11462466/read-and-write-binary-file-in-python) –