繁体   English   中英

在python中读取二进制文件

[英]Reading binary files in python

我有一个要使用python读取的二进制文件。 我知道前493个字节是x值,接下来的87个字节是y值,最后147个字节是z值。 我写了一些代码,如下所示:

with open("file", "rb") as fileHandle:
    byte = fileHandle.read(1)

    datax = []
    datay = []
    dataz = []

    dim_x = 493
    dim_y = 87
    dim_z = 147

    while fileHandle.tell() < dim_x + dim_y + dim_z:
        byte = fileHandle.read(1)

        if fileHandle.tell() < dim_x:
            datax.append(byte)

        if dim_x < fileHandle.tell() < dim_x + dim_y:
            datay.append(byte)

        if dim_x + dim_y < fileHandle.tell() < dim_x + dim_y + dim_z:
            dataz.append(byte)

    print fileHandle.tell()
    print len(fileHandle.read())

但是,当我比较fileHandle.tell()len(fileHandle.read()) ,分别产生727和6304250。 这一定意味着我只获得部分数据吗? 我以为fileHandle.read(1)会逐字节遍历文件? 我在这里想念什么?

值得注意的是,如何在Python中以简单的轮廓图绘制这些数据? matplotlib是要走的路吗?

首先,使初始比较不受限制,即:

if dim_x <= fileHandle.tell() < dim_x + dim_y:

第二件事:您的文件显然具有727 + 6304250字节。 最后一次读取调用将返回您尚未读取的所有剩余字节。 是的,由于只请求了前727个字节,因此您仅获得部分数据。

但是,有许多更有效和更Python的方法可以做到这一点。

[我只是Python的初学者,所以我可能误会了一些东西。]

我可以看到此程序有一些问题,也许还有一个问题可以解释您看到的数字。

  1. 该文件的第一个字节由程序的第二行读取,因此不会保存为X值。 您可能应该删除该行。

  2. 当tell()的值为493或580时,if语句不执行任何操作。您需要几个<=。 这样的事情会抓住他们:

  if fileHandle.tell() < dim_x: datax.append(byte) if dim_x <= fileHandle.tell() < dim_x + dim_y: datay.append(byte) if dim_x + dim_y <= fileHandle.tell() < dim_x + dim_y + dim_z: dataz.append(byte) 
  1. 如果文件的长度恰好是493 + 87 + 147 = 727字​​节,则实际上您将读取文件末尾之外的三个字节。 我不确定当您这样做时会发生什么。 可能是错误消息。

  2. 最后一行实际上尝试读取文件中剩余的所有内容。 因此,看来您的文件比727字节长得多。 实际上,我猜想它的长度为727 + 6304250 = 6304977字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM