我有一個非常長的字符串,它是1和0的。它大約有12個32位彙編指令。我想寫這個流到一個.bin文件...但我不希望它是ASCII格式。我只想將1和0寫入文件。任何想法如何轉換並使用.write來完成這個?謝謝!Python將字符串「1001101」作爲二進制流寫入文件
回答
看來你需要struct
:
import struct
import numpy as np # for random string of ones and zeros
def chunks(s):
for i in xrange(0, len(s), 32):
yield s[i:i+32]
s = ''.join(str(np.random.randint(2)) for x in xrange(32*2))
ints = (int(x, 2) for x in chunks(s)) # convert string from binary repr to integers
bins = (struct.pack('I', i) for i in ints) # pack to unsigned ints
輸出:
>>> s
'0000000000011111011101011001010111000000010110111100111110001001'
>>> ''.join(bins)
'\x95u\x1f\x00\x89\xcf[\xc0'
注意I
格式是本機格式unsigned int類型,你可以指定字節順序expicetely,與>I
是大端int32和<I
little-endian(注意倒序的4字節序列):
>>> bi_bins = (struct.pack('>I', i) for i in ints)
>>> ''.join(bi_bins)
'\x00\x1fu\x95\xc0[\xcf\x89'
我正準備回答我自己的問題......但你也是這麼做的。你的問題有一個,它需要轉換成大端。我在輸出上用xxd檢查過它,它工作。感謝你的回答!這是我的代碼工作。 'i = 0 while i
@ user2304751是的,我沒有提到字節順序,並且即將編輯我的答案,但你評論得更快:)我將添加這個以供進一步參考。 – alko
@alko它是「endian」,而不是「印度人」。與大次大陸的公民沒有任何關係。這個詞源於格列佛的旅行,因爲關於如何去除蛋的問題存在爭議:在大的一端或在小端。因此,「大端」和「小端」。一,二,三,四,五個小端。 – Hyperboreus
這是如何在你的二進制字符串寫入文件,假設它是在32位整數,並假設它使用系統的本機字節序:
#! /usr/bin/python3.2
import struct
b = '011011100010000001101110010010010010000001100001011101100110111101110100011100100110010101100110011010010110111001100001001000000010000001110011011101010110110101100001011101000111010101101101001000000111001101100001011101000110010101100011011010010110010001100110001000000110010101110010011000010110110101110010011011110010111000101110001011100111001100101110001011100010111000101110'
with open ('out.bin', 'wb') as f:
while b:
int32 = int (b [:32], 2)
b = b [32:]
f.write (struct.pack ('I', int32))
關於您的ASCII關注
如果您在文本編輯器,或者打開輸出文件out.bin
你cat
呢,下面顯示出來:
$ cat out.bin
In nova fert animus mutatas dicere formas.......
事實上,這是人類可讀的文本是好的,適當的。原來的比特流可以解釋爲ASCII是純粹的巧合。它是二元的。
- 1. Python - 將一個雙字節字符串作爲單字節十六進制字符寫入二進制文件
- 2. 如何將字符串作爲二進制文件寫入文件?
- 3. Python:將int寫入二進制文件
- 4. 將一個字符串作爲二進制數據寫入文件 - C
- 5. Swift 3將字符串寫入二進制文件
- 6. 將二進制字符串寫入文件
- 7. 在Lua中將字符串寫入二進制文件
- 8. 將包含字符串的結構寫入二進制文件
- 9. 如何使用Python3將二進制文件寫入字符串?
- 10. 將字符串寫入二進制文件C++
- 11. Python將long int作爲二進制值寫入文件
- 12. Python將二進制字符串轉換爲二進制int
- 13. 寫的字符串二進制數據的二進制文件
- 14. 將二進制字符串轉換爲二進制文字
- 15. 寫入二進制數據作爲字符串C#
- 16. 字符串寫入到二進制文件用C
- 17. Python:將JSON字符串寫入文件。
- 18. 將文件和字符串編碼爲二進制文件C#
- 19. 寫入二進制文件python
- 20. 將二進制字符串轉換爲文本字符串
- 21. 寫二進制字符串轉換爲圖像文件
- 22. 讀取二進制文件並將其轉換爲二進制字符串
- 23. 將二進制數據(例如二進制文件)導出爲.NET字符串?
- 24. 字符串爲二進制
- 25. 寫入二進制文件?
- 26. 寫入二進制文件
- 27. 寫入二進制文件
- 28. 寫入二進制文件
- 29. 將字符串轉換爲二進制
- 30. 將字符串轉換爲二進制
沒有bin文件是ASCII格式。但是,如果在文本編輯器中打開bin文件,肯定會出現一些可讀的字符,因爲編輯器將字節解釋爲ASCII字符。數字32和空格之間基本上沒有區別。這只是你看待它的方式。在你的情況下,「1001101」將顯示爲「M」。 – Hyperboreus
使用[struct](http://docs.python.org/2/library/struct.html) – dawg