在 python 中写入二进制输出的最有效方法是什么?

What is the most efficient way to write in binary output in python?

我有这个列表

bytes = ['11010001', '00100111']

而我想把bytes的内容写到我自己的二进制文件中,作为一个字节。因此,我遍历列表的每个元素,将其从字符串转换为二进制,然后将其作为由该二进制组合表示的字符写入文件。

output = open(location+filename + '.enchuff', 'wb')
for byte in bytes:
   chunk = int(byte, base=2)
   output.write(chr(chunk))

它运行良好,但问题是当 bytes 列表变大时。我从另一个文件生成它,当我输入一个 100MB 的文件供它读取时,列表变得非常长,我的程序挂在 for 循环上。我想 for 循环一定是问题所在,因为它可能迭代了数十万个元素并记下了每个元素。此外,我的内存消耗从那时起甚至跃升至 4GB 内存。有没有其他方法可以更快地实现这一目标并保留宝贵的 RAM?

您的代码可能效率低下,因为您正在为流中的每个字节执行写入操作。虽然写入可能会被缓冲,但这种情况发生在较低级别,每次迭代都会产生大量开销。

您可以改为在内存中转换字节流,然后将其写入流,例如:

data = [chr(int(x, base=2)) for x in bytes]
output.write(''.join(data))

如果内存消耗是一个问题,您可以将转换后的字节写入块中,例如:

chunksize = 1024
for c in range(0,len(bytes),chunksize):
   data = [chr(int(x, base=2)) for x in bytes[c:c+chunksize]]
   output.write(''.join(data))