我有一个非常长的字符串,它是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