2017-04-19 196 views
1

我正在使用霍夫曼编码和解码算法在python中创建一个压缩项目。我必须创建一个尺寸更小的文件。我正在使用从霍夫曼树中得到的字节值,并将它们作为字符串文字(如'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) 

binaryToBytes.bin含量(它是3个字节长和赛特示出)是:

enter image description here 就是这样,正确?

P.S.在binariesFile.txt这里的内容:

01001010 
10100101 
01001011 



ADDENDUM (2017-04-25)

继OP的要求(见注释),我在下面提供了转换的两个通道中的两个部分代码。该代码读取.txt文件与01010101类似的行,在.txt文件中为每行写入一个二进制文件.bin-fromTxt,然后使用单个字节读取.bin-fromTxt文件并编写.txt-fromBin文件,其中包含01010101类似的行。 在该过程结束时,.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 

只需用您的字符串转换为整数内置有2为基地int功能。

+0

这不是我正在寻找的。我的意思是说,我有一个字符串,例如'0100101',我想将它作为一个二进制文件中的代码存储。我想与convertion –