저는 파이썬에서 1과 0의 문자열을 가지고 있고 그것을 바이너리 파일에 쓰고 싶습니다. 이 작업을 수행하는 좋은 방법을 찾는 데 많은 어려움을 겪고 있습니다.파이썬 : 1과 0의 문자열 -> 바이너리 파일
이 작업을 수행하는 표준 방법이 있습니까? 8 비트의 조각으로 귀하의 의견은 다음 int(_, 2)
및 chr
을 적용
저는 파이썬에서 1과 0의 문자열을 가지고 있고 그것을 바이너리 파일에 쓰고 싶습니다. 이 작업을 수행하는 좋은 방법을 찾는 데 많은 어려움을 겪고 있습니다.파이썬 : 1과 0의 문자열 -> 바이너리 파일
이 작업을 수행하는 표준 방법이 있습니까? 8 비트의 조각으로 귀하의 의견은 다음 int(_, 2)
및 chr
을 적용
In [1]: int('10011001',2)
Out[1]: 153
분할 후 문자열로 연결할 및 파일에이 문자열을 작성합니다.
뭔가 같은 ... :
your_file.write(''.join(chr(int(your_input[8*k:8*k+8], 2)) for k in xrange(len(your_input)/8)))
당신이 바이너리 파일을 원하는 경우에,
>>> 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
�+$
이 당신이 찾고있는 무엇인가?
myStr의 가능한 값은 매우 낮습니다 ('i'형식은 -2147483648 <= number <= 2147483647). 그것을 더 작은 값으로 분해해야합니다. 그럼에도 불구하고 질문에 진정으로 대답하기에 충분한 정보가 제공되지 않습니다. –
@oxtopus, 범위가 제한되어 있다고 동의합니다. 그러나 당신은 다른 방법으로 무엇을 제안하겠습니까? –
@oxtopus는 정보가 충분하지 않다고 동의했지만, 우리 모두는 같은 방식으로 OP를 읽는 것 같습니다. :) –
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)
은 또는 당신은 비트 스트링 모듈은 당신이 필요 않는 지금이이
$ 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()
$
처럼 array
모듈을 사용할 수 있습니다.
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()
당신은 표준 방법은 "1"과 "0"의 문자열 트래픽에 결코 xxd -b file.bin
와 리눅스 쉘에서입니다 테스트 할 수 있습니다. 이 끈은 어디에서 왔습니까? –
"바이너리 파일"과 같은 의미있는 것은 없습니다. 모든 파일은 '바이너리'입니다. 그들은 일련의 비트를 포함합니다. ** ** 당신이 의미하는 것은 ** "나는 문자열의 각 '1'과 '0'문자를 단일 비트로 해석하고, 8 비트를 바이트로 그룹화하고 결과를 파일에 씁니다. –
@KarlKnechtel. 물론 그래, 그게 내가하고 싶은 일이야. 하지만 나는 아래에 제안 된 리오 리와 같은 방식으로 그렇게하려고 할 때 오류가 발생합니다. 나는 그 문제를 조금 아래에서 설명했다. – sevandyk