[英]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的初学者,所以我可能误会了一些东西。]
我可以看到此程序有一些问题,也许还有一个问题可以解释您看到的数字。
该文件的第一个字节由程序的第二行读取,因此不会保存为X值。 您可能应该删除该行。
当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)
如果文件的长度恰好是493 + 87 + 147 = 727字节,则实际上您将读取文件末尾之外的三个字节。 我不确定当您这样做时会发生什么。 可能是错误消息。
最后一行实际上尝试读取文件中剩余的所有内容。 因此,看来您的文件比727字节长得多。 实际上,我猜想它的长度为727 + 6304250 = 6304977字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.