2017-04-19 5 views
1

나는 압축 프로젝트를 허프만 인코딩 및 디코딩 알고리즘을 사용하여 파이썬으로 작성하고 있습니다. 크기가 훨씬 작은 파일을 만들어야합니다. 나는 호프만 트리에서 얻은 바이트 값을 사용하고 '0100101'과 같은 문자열 리터럴로 파일에 기록합니다.이 숫자를 변환하여 이진수로 저장하려고합니다. '진수'에 의해 당신이 정수를 의미한다고 가정바이트를 문자열로 실제 바이트 유형으로 변환

답변

1

하나의 파일에 저장된 이진 값을 나타내는 문자열 목록을 다른 파일에 바이트로 쓰는 방법에 대한 예제는 아래 코드를 참조하십시오. 두 변종 (사용 된 것과 사용하지 않은 것) 모두 동일한 결과를 제공합니다.

# lstStrBin = ['01001010','10100101','01001011'] 
lstStrBin = open("binaryToByteString_Cg.txt").readlines() 
# byteArr = bytearray([int(strBin, 2) for strBin in lstStrBin]) 
bytesString = bytes([int(strBin, 2) for strBin in lstStrBin]) 
# print(byteArr) gives: bytearray(b'J\xa5K') 
with open('binaryToByteString_Cg.bin', "wb") as f: 
    # f.write(byteArr) 
    f.write(bytesString) 

(3 바이트 길이 SciTE 같다) binaryToBytes.bin의 내용은 다음과

enter image description here 바로 그것을 있다고?

P. binariesFile.txt의 다음 내용 :



ADDENDUM (2017-04-25)

01001010 
10100101 
01001011 
:

가 (주석 참조) 나는 변환의 두 가지에 대한 두 부분의 코드를 아래에 제공 OP의 요청에 따라. 이 코드는 01010101과 같은 줄을 가진 .txt 파일을 읽고 파일의 각 줄에 대해 단일 바이트로 이진 파일 .bin-fromTxt을 작성한 다음 파일에 01010101과 같은 줄을 포함하여 .bin-fromTxt 파일을 읽고 씁니다. 절차가 끝나면 .txt-fromBin 파일의 내용은 .txt 파일과 동일한 내용으로 앞뒤 전환이 성공적임을 나타냅니다.

with open('binaryToByteString_Cg.txt') as f_txt: 
    bytesString = bytes([int(strBin, 2) for strBin in f_txt.readlines()]) 
    with open('binaryToByteString_Cg.bin-fromTxt', "wb") as f_bin: 
     f_bin.write(bytesString) 

with open('binaryToByteString_Cg.bin-fromTxt', "rb") as f_bin: 
    bytesString = f_bin.read() 
    with open('binaryToByteString_Cg.txt-fromBin', "w") as f_txt: 
     for byte in bytesString: 
      f_txt.write("{0:{fill}8b}\n".format(byte, fill='0')) 

는 경우에 binaryToByteString_Cg.txt 파일에는 다음이 포함

01010101 
10101010 
00001111 

binaryToByteString_Cg.bin-fromTxt 파일에는 다음이 포함

enter image description here

최종 binaryToByteString_Cg.txt-fromBin을 다시 :

01010101 
10101010 
00001111 
+0

에 대한 도움을 원했고 다음과 같은 오류 메시지가 표시되었습니다. ValueError : 바이트가 범위 (0, 256)에 있어야합니다. –

+0

어떻게 다시 문자열로 변경합니까 ?? @Claudio –

0

:

>>> int('0100101', 2) 
37 

간단히 사용하여 정수로 문자열을 변환 내장 도심 2int 기능.

+0

그건 내가 찾던 것이 아니다. 내가 의미하는 바는 문자열이 있는데, 예를 들어 '0100101'이고 이진 파일에 비트 코드로 저장하려고합니다. 내 파일이 더 많은 요소를 포함하고 있기 때문에 변환 –

관련 문제