当前位置: 首页 > 面试题库 >

用python读取二进制文件

麹高远
2023-03-14
问题内容

我发现用Python读取二进制文件特别困难。你能帮我个忙吗?我需要读取此文件,在Fortran 90中,该文件很容易被读取

int*4 n_particles, n_groups
real*4 group_id(n_particles)
read (*) n_particles, n_groups
read (*) (group_id(j),j=1,n_particles)

详细而言,文件格式为:

Bytes 1-4 -- The integer 8.
Bytes 5-8 -- The number of particles, N.
Bytes 9-12 -- The number of groups.
Bytes 13-16 -- The integer 8.
Bytes 17-20 -- The integer 4*N.
Next many bytes -- The group ID numbers for all the particles.
Last 4 bytes -- The integer 4*N.

如何使用Python阅读?我尝试了一切,但没有成功。我是否有可能在python中使用f90程序,读取此二进制文件,然后保存需要使用的数据?


问题答案:

读取二进制文件内容,如下所示:

with open(fileName, mode='rb') as file: # b is important -> binary
    fileContent = file.read()

然后使用struct.unpack
“解压缩”二进制数据:

起始字节: struct.unpack("iiiii", fileContent[:20])

正文:忽略标题字节和尾随字节(=
24);剩下的部分构成主体,要知道主体中的字节数做一个整数除以4;将获得的商乘以字符串'i'以为unpack方法创建正确的格式:

struct.unpack("i" * ((len(fileContent) -24) // 4), fileContent[20:-4])

结束字节:struct.unpack("i", fileContent[-4:])



 类似资料:
  • 问题内容: 我正在尝试使用Python 3读取包含图像(视频)的12位二进制文​​件。 要读取类似的文件但以16位编码,以下代码可以很好地工作: 其中filename_video是文件,可以从另一个文件读取视频的nb_frames,高度和宽度特征。“工作得很好”是指快速:在计算机上读取具有140帧的640x256视频大约需要1毫秒。 据我所知,当文件以12位编码时,由于没有uint12类型,因此无

  • 问题内容: 我有一个较长的无符号整数文件(每个64位,0.47GB文件),需要读取并存储在数组中。经过一番思考之后,由于Java中的所有内容都已签名(请纠正我,请纠正我),因此我长时间使用了该类型,我想不出更好的选择了。无论如何,仅需对数组进行排序,因此原始数字的精确值并不是最重要的。我们应该测量排序算法的效率,仅此而已。但是,当我实际要读取文件时(在下面的代码中),我遇到了砖墙。 它会一直持续下

  • 问题内容: 我正在尝试从URLConnection读取二进制文件。当我使用文本文件对其进行测试时,它似乎可以正常工作,但对于二进制文件则不能。发送文件时,我在服务器上使用以下mime类型: 但是到目前为止,似乎没有任何效果。这是我用来接收文件的代码: 问题答案: 我就是这样

  • 问题内容: 我正在尝试在Python中读取BMP文件。我知道前两个字节表示BMP公司。接下来的4个字节是文件大小。当我执行时: 我得到: ValueError:以10为底的int()的无效文字:’F#\ x13’ 我想做的是将这四个字节读取为整数,但是Python似乎将它们读取为字符并返回一个字符串,该字符串无法转换为整数。如何正确执行此操作? 问题答案: 该方法将字节序列作为字符串返回。要将字符

  • 所以。。。我需要从.pkl文件中读取并导入图像数据集。图像存储为“二进制blob”。一旦完成了,我需要将它们转换成字节格式,这样我就可以通过Google的CloudVision运行它们。我设法在Linux虚拟机上打开了该文件(花了几天时间试图让它在Windows上工作…)。但现在我似乎无法将这个“二进制斑点”转换为我可以使用的实际图像。。。 下面是一个“二进制blob”: \1\x0 0 0 0\

  • 问题内容: 在Python中,如何读取二进制文件并在该文件的每个字节上循环? 问题答案: Python 2.4及更早版本 Python 2.5-2.7 请注意,with语句在2.5以下的Python版本中不可用。要在v 2.5中使用它,你需要导入它: 在2.6中是不需要的。 Python 3 在Python 3中,这有点不同。我们将不再以字节模式而是字节对象从流中获取原始字符,因此我们需要更改条件