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

标签 python list binaryfiles

我有这个 list

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))

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

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))

关于python - 在 python 中写入二进制输出最有效的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33466542/

相关文章:

Python绑定(bind)Dataclass和TypedDict(从TypedDict继承Dataclass)

Python 字典打印所有键的所有值

list - 如何在Mathematica中使用函数式编程减去列表中的特定元素?

c++ - 读取二进制文件并转换为二进制字符串

python - Django 模板 - 值的整洁 1-1 翻译(字典查找)

python - 在 Python 中写一个字符串(换行)

ios - 将 Float 数组写入二进制文件并快速读取

Java : How to find string patterns in a LARGE binary file?

python - 构建启用时区的应用程序时的最佳实践

python - 如何连接列表python中的字符串