2016-12-01 72 views
0

我想做一個簡單的操作,但我無法管理它。我有一個由編碼算法導出的'0'和'1'字符串。我想寫入文件,但我認爲我做錯了。如何在Python中編寫/打包二進制字符串文件

我的字符串是像「11101010000 ...... 10000101010」

其實我在寫一個二進制文件爲:

print 'WRITE TO FILE ' 
with open('file.bin', 'wb') as f: 
    f.write(my_coded_string) 

print 'READ FROM FILE' 
with open('file.bin', 'rb') as f: 
    myArr = bytearray(f.read()) 
myArr = str(myArr) 

如果我看文件的大小,我得到了很大的東西。所以我想我正在使用整個字節來寫每個1和0.是否正確?

我發現了一些使用'struct'函數的例子,但我沒有設法理解它是如何工作的。

謝謝!

+0

見http://stackoverflow.com/questions/142812/does-python-have-a-bitfield-type – cdarke

+0

如何你的長串是多少?他們可以轉換成整數嗎?我在想'int(my_coded_string,2)',然後'struct.pack()'。 – cdarke

回答

2

使用此:

import re 
text = "01010101010000111100100101" 
bytes = [ chr(int(sbyte,2)) for sbyte in re.findall('.{8}?', text) ] 

獲得字節,可追加到二進制文件的列表,

with open('output.bin','wb') as f: 
    f.write("".join(bytes)) 
2

因爲輸入的二進制是串蟒蛇寫道:每一位爲char。 您可以從

這樣與bitarray模塊寫你的比特流:

from bitarray import bitarray 

str = '110010111010001110' 

a = bitarray(str) 
with open('file.bin', 'wb') as f: 
    a.tofile(f) 

b = bitarray()  
with open('file.bin', 'rb') as f: 
    b.fromfile(f) 

print b 
相關問題