python - 使用 Numpy fromfile 和给定的偏移量读取二进制文件

标签 python arrays numpy binary

我有一个二进制文件,其中包含飞机位置的记录。 每条记录如下所示:

0x00: Time, float32
0x04: X, float32 // X axis position
0x08: Y, float32 // Y axis position
0x0C: Elevation, float32
0x10: float32*4 = Quaternion (x,y,z axis and w scalar)
0x20: Distance, float32 (unused)

因此每条记录的长度为 32 字节。

我想要一个 Numpy 数组。

在偏移量 1859 处有一个 unsigned int 32(4 个字节),它指示数组元素的数量。我的例子是 12019。

我(目前)不关心 header 数据(偏移量 1859 之前)

数组仅从偏移量 1863 (=1859+4) 开始。

我定义了自己的 Numpy dtype,例如

dtype = np.dtype([
    ("time", np.float32),
    ("PosX", np.float32),
    ("PosY", np.float32),
    ("Alt", np.float32),
    ("Qx", np.float32),
    ("Qy", np.float32),
    ("Qz", np.float32),
    ("Qw", np.float32),
    ("dist", np.float32),
])

我正在使用 fromfile 读取文件:

a_bytes = np.fromfile(filename, dtype=dtype)

但我没有看到任何参数可以提供给 fromfile 来传递偏移量。

最佳答案

您可以使用标准 python 文件打开文件,然后寻求跳过 header ,然后将文件对象传递给 fromfile。像这样的事情:

import numpy as np
import os

dtype = np.dtype([
    ("time", np.float32),
    ("PosX", np.float32),
    ("PosY", np.float32),
    ("Alt", np.float32),
    ("Qx", np.float32),
    ("Qy", np.float32),
    ("Qz", np.float32),
    ("Qw", np.float32),
    ("dist", np.float32),
])

f = open("myfile", "rb")
f.seek(1863, os.SEEK_SET)

data = np.fromfile(f, dtype=dtype)
print x 

关于python - 使用 Numpy fromfile 和给定的偏移量读取二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30124255/

相关文章:

python - numpy masked_array 掩码更改类型

python - 如何保存解决此 : saving images with PIL. 图像

python - Django与领域和自身的多对多关系独特

python - 正则表达式匹配任何字符或不匹配?

sql - 从 PostgreSQL 表中的数组中删除 # 个字符?

java - 播放声音的非常简单的 ListPreference 不起作用。有任何想法吗? (大量细节)

php - 有条件的 CakePHP 可包含行为

python - 我从 Quandl 检索股票数据时哪里出错了?

python - 有多少种方法可以构建完美平衡的树?

python - Numpy:通过 z 索引数组索引 3d 数组