Python - 在二进制文件中写入长字符串

时间:2017-11-15 15:37:25

标签: python arrays ascii binaryfiles

我有一个由~75 000位(非常长的字符串)组成的字符串。

我想创建一个由这个位序列表示的二进制文件。 我做了以下代码:

byte_array = bytearray(global_bits_str.encode())
with open('file1.bin', 'wb') as f:
    f.write(byte_array)

但是当我检查file1.bin时,我可以看到它由75 000字节而不是75 000字节组成。我猜它已经在文件中以ascii(每位1个字节)编码。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以使用int内置函数将二进制字符串转换为整数序列,然后将其传递给bytearray

一个字节的示例:

>>> int('10101010', 2)
170
>>> bytearray([170])
bytearray(b'\xaa')

拆分字符串:

chunks = [bit_string[n:n+8] for n in range(0, len(bit_string), 8)]

你必须为最后一个块做一些特殊的套管,因为它可能不是一个完整的字节,可以由ljust完成左边的填充。

把它放在一起:

def to_bytes(bits, size=8, pad='0'):
    chunks = [bits[n:n+size] for n in range(0, len(bits), size)]
    if pad:
        chunks[-1] = chunks[-1].ljust(size, pad)
    return bytearray([int(c, 2) for c in chunks]

# Usage:
byte_array = to_bytes(global_bits_str)