【问题标题】:python reading byte by byte from bin file takes too longpython从bin文件中逐字节读取需要太长时间
【发布时间】:2018-10-25 15:01:09
【问题描述】:

我正在尝试使用以下代码从 bin 文件中读取字节:

with open("filedata.bin","rb") as file:
   data = file.read()
   for byte in data:
         print byte

这很好用,但问题是它需要的时间太长(大约 4 分钟)。目标是读取 bin 文件的任何字节并通过串行接口发送它们。

我的文件是 101 KB。到目前为止,我没有通过串行接口发送任何数据。所以这不是问题。我用“打印字节”验证了 python shell 的速率。它打印我从第一个字节到最后一个字节。

有人知道如何更快地读取字节吗?

【问题讨论】:

  • 您要读取的文件的大小是多少? 4分钟对于文件读取来说是很长的时间......
  • 这就是您的应用程序所做的全部工作吗?还是您正在使用此处未显示的字节进行操作?
  • 目前这就是我正在做的所有事情。

标签: python binary byte bin


【解决方案1】:

当使用不带任何参数的file.read() 时,您会立即将整个文件读入内存。这通常很慢。

为了加快速度,您需要一次读取文件几个字节。

您可以通过指定要读取的字节数来做到这一点,例如:

with open("myfile", "rb") as f:
    byte = f.read(1)
    while byte:
        # do something with the byte
        byte = f.read(1)

更高级的方法是使用iter 函数:

for i in iter(lambda x: f.read(1), b""):
    # do something with the byte

【讨论】:

  • 这可能会更慢,因为它必须执行很多 I/O 操作。通常最好使用更接近磁盘块大小的大小,可能是 4096 (4kb)。
  • @Ralf 请注意open 的结果是BufferedIOBase,顾名思义,它是缓冲的。这意味着它实际上会从底层文件中读取超过 1 个字节,因此不会增加 I/O 操作的数量。在我的机器上,它读取 8196 字节。您可以使用例如验证这一点strace
  • @FaridPeymanMohammedZoghian 您是否验证过读取文件实际上很慢?你的文件有多大?在我看来,连续剧更有可能是极限。
猜你喜欢
  • 1970-01-01
  • 2011-01-16
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多