【问题标题】:How to unpack/convert binary data in a file into readable values?如何将文件中的二进制数据解包/转换为可读值?
【发布时间】:2019-07-11 07:40:32
【问题描述】:

我有一个 .pcd 文件,当我用我的文本编辑器打开它时,我看到了这个:

# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z _
SIZE 4 4 4 1
TYPE F F F U
COUNT 1 1 1 4
WIDTH 246564
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 246564
DATA binary
É,>  Ì= €¿  €?  .>  Ì=ÃY¿  €?  .>Ì~Í= €¿  €?  2>  Ì=5a¿  €?  2>øuÍ= €¿  
€?  6>  Ì=Ûv¿  €?  6>²vÌ= €¿  €?¹“6>  Ì= €¿  €?CÊ">  Ä= €¿  €?  &  Ä=…¿
......

这种格式的文档在这里:http://pointclouds.org/documentation/tutorials/pcd_file_format.php

文档中的示例:

# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 213
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 213
DATA ascii
0.93773 0.33763 0 4.2108e+06
0.90805 0.35641 0 4.2108e+06
0.81915 0.32 0 4.2108e+06

现在我想将这些二进制数据转换为文档中的数字。正如我所看到的,我可以使用 python mapped.unpack,但我不知道该怎么做。

【问题讨论】:

  • struct.unpack('f', 'É,>'.encode())'É,>' 转换为float 0.16849426925182343
  • 使用谷歌"python PCD"我发现PyPCD可能会解决你的问题。

标签: python binary binary-data


【解决方案1】:

如果您想使用 struct 并且提供的文件是您要从中提取数据的唯一文件,这是您可以做到的一种方法:

import struct

with open("your_file.pcd") as f:
    lines = f.readlines()

unpacker = struct.Struct("fff4B")
packed_data = lines[-1]
x = []
y = []
z = []
_ = []
for i in range(0, 246564):
    try:
        unpacked = unpacker.unpack_from(packed_data[i:])
    except struct.error:
        break
    x.append(unpacked[0])
    y.append(unpacked[1])
    z.append(unpacked[2])
    _.append(unpacked[3:])

print(x)
print(y)
print(z)
print(_)

这当然不是像PyPCD 这样解析 PCD 文件的通用方法,但它确实适用于这个特定的文件和数据集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2012-05-02
    • 2012-12-16
    • 1970-01-01
    相关资源
    最近更新 更多