【发布时间】:2017-04-19 00:56:14
【问题描述】:
我正在使用 Huffman 编码和解码算法在 python 中创建一个压缩项目。我必须创建一个小得多的文件。我正在使用从霍夫曼树中获得的字节值并将它们作为字符串文字(如 '0100101')写入文件中,我想将相同的数字转换为二进制数。
【问题讨论】:
标签: algorithm python-3.x huffman-code
我正在使用 Huffman 编码和解码算法在 python 中创建一个压缩项目。我必须创建一个小得多的文件。我正在使用从霍夫曼树中获得的字节值并将它们作为字符串文字(如 '0100101')写入文件中,我想将相同的数字转换为二进制数。
【问题讨论】:
标签: algorithm python-3.x huffman-code
有关如何将表示存储在一个文件中的二进制值的字符串列表作为字节写入另一个文件的示例,请参见下面的代码。请注意,两种变体(已使用的和已注释掉的)都会给您相同的结果。
# 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字节长,SciTE显示)的内容为:
附:这里是 binariesFile.txt 的内容:
01001010
10100101
01001011
ADDENDUM (2017-04-25):
根据 OP 的请求(参见 cmets),我在下面提供了两种转换方式的两部分代码。该代码读取带有01010101 行的.txt 文件,为.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 文件包含:
还有最后的binaryToByteString_Cg.txt-fromBin:
01010101
10101010
00001111
【讨论】:
假设“二进制数”是指整数:
>>> int('0100101', 2)
37
使用以2 为基础的内置int 函数将字符串转换为整数。
【讨论】: