解释Python

时间:2016-05-12 14:17:06

标签: python binaryfiles

我正在使用Python 2.7

我正在尝试使用一个大型二进制文件来指定图像每个像素的纬度/经度。

使用此代码:open('input', 'rb').read(50)

该文件如下所示: \x80\x0c\x00\x00\x00\x06\x00\x00.\x18\xca\xe4.\x18\xcc\xe4.\x18\xcf\xe4.\x18\xd1\xe4.\x18\xd3\xe4.\x18\xd5\xe4.\x18\xd7\xe4.\x18\xd9\xe4/\x18\xdb\xe4/\x18\xdd\xe4/\x18 ...

该文件的自述文件提供了以下解码信息,但我不确定如何应用它们:

文件采用LSBF字节顺序。文件以2个4字节整数值开头,给出文件的像素和行(x,y)大小。在文件成功后,成对的元素是纬度和经度的2字节整数值乘以100并截断(例如75.324 E是“-7532”)。

感谢您的帮助。

请注意,最终这样做的原因是基于纬度/经度而不是像素#来绘制/改变图像,以防有人想知道。

1 个答案:

答案 0 :(得分:0)

通常在处理二进制文件时,您将要使用pack和unpack(https://docs.python.org/2/library/struct.html)函数。这将允许您控制数据的endianess以及数据类型。在您的特定情况下,您可能希望首先阅读标题信息,例如

with open('input', 'rb') as fp:

    # read the header bytes to get the number of elements

    header_bytes = fp.read(8)

    # convert the bytes to two unsigned integers. 

    x, y = unpack("II", header_bytes)

    # Loop through the file getting the rest of the data
    # read Y lines of X pixels

    ...

以上内容实际上并未运行或测试,只是试图让您对方法有一般意义。