Python: строка из 1 и 0 -> двоичный файл - PullRequest
4 голосов
/ 12 октября 2011

У меня есть строка из 1 и 0 в Python, и я хотел бы записать ее в двоичный файл. У меня много проблем с поиском хорошего способа сделать это.

Есть ли стандартный способ сделать это, которого мне просто не хватает?

Ответы [ 5 ]

8 голосов
/ 12 октября 2011

Если вам нужен двоичный файл,

>>> import struct
>>> myFile=open('binaryFoo','wb')
>>> myStr='10010101110010101'
>>> x=int(myStr,2)
>>> x
76693
>>> struct.pack('i',x)
'\x95+\x01\x00'
>>> myFile.write(struct.pack('i',x))
>>> myFile.close()
>>> quit()
$ cat binaryFoo
�+$

Это то, что вы ищете?

2 голосов
/ 12 октября 2011
In [1]: int('10011001',2)
Out[1]: 153

Разделите ваш ввод на части по восемь битов, затем примените int(_, 2) и chr, затем объедините в строку и запишите эту строку в файл.

Что-то вроде ...:

your_file.write(''.join(chr(int(your_input[8*k:8*k+8], 2)) for k in xrange(len(your_input)/8)))
0 голосов
/ 03 июня 2013

Теперь есть модуль цепочки битов, который делает то, что вам нужно.

from bitstring import BitArray

my_str = '001001111'
binary_file = open('file.bin', 'wb')
b = BitArray(bin=my_str)
b.tofile(binary_file)
binary_file.close()

Вы можете протестировать его из оболочки в Linux с помощью xxd -b file.bin

0 голосов
/ 12 октября 2011

Или вы можете использовать модуль array как этот

$ python
Python 2.7.2+ (default, Oct  4 2011, 20:06:09) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import random,array
#This is the best way, I could think of for coming up with an binary string of 100000 
>>> binStr=''.join([str(random.randrange(0,2)) for i in range(100000)]) 
>>> len(binStr)
100000
>>> a = array.array("c", binStr)
#c is the type of data (character)
>>> with open("binaryFoo", "ab") as f:
...     a.tofile(f)
... 
#raw writing to file
>>> quit()
$ 
0 голосов
/ 12 октября 2011
BITS_IN_BYTE = 8
chars = '00111110'
bytes = bytearray(int(chars[i:i+BITS_IN_BYTE], 2)
    for i in xrange(0, len(chars), BITS_IN_BYTE))
open('filename', 'wb').write(bytes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...