将字节作为字符串转换为实际的字节类型

Converting byte as a string into actual byte type

我正在 python 使用霍夫曼编码和解码算法创建一个压缩项目。我必须创建一个更小的文件。我正在使用从霍夫曼树中获取的字节值,并将它们作为字符串文字写入文件,如“0100101”我想转换这些相同的数字,以便它存储为二进制数。

假设 'binary number' 你指的是整数:

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

使用内置的 int 函数以 2 为基数将字符串简单地转换为整数。

请参阅下面的代码,了解如何将表示存储在一个文件中的二进制值的字符串列表作为字节写入另一个文件。请注意,两种变体(已使用的和已取消注释的变体)都会为您提供相同的结果。

# 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中显示)是:

就这样吧?

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

01001010
10100101
01001011



ADDENDUM (2017-04-25):

根据 OP 的请求(见评论),我在下面提供了两种转换方式的两部分代码。代码读取一个 .txt 文件,其中包含 01010101 行,写入一个二进制文件 .bin-fromTxt.txt 文件中的每一行都有一个字节,然后读取 .bin-fromTxt 文件,并写入包含 01010101 行的 .txt-fromBin 文件。 在该过程结束时,.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