如何将文件中的二进制数据解压缩/转换为可读值?

时间:2019-07-11 07:40:32

标签: python binary binary-data

我有一个.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 struck.unpack,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

如果您要使用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文件的通用方法,但是它确实适用于此特定文件和数据集。