2016-05-12 66 views
-1

这是我第一次使用二进制文件直接与我一起工作。在Python中解释二进制数据

我使用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.324E是“-7532”)。

感谢您的任何帮助。

请注意,最终这样做的原因是根据lat/long绘制/更改图像,而不是像素#,以防有人想知道。

+1

您可以将其转换为NumPy数组。那会很方便吗?顺便说一句,你使用Python 2或Python 3? –

+0

python中的两个主要工具是['struct'](https://docs.python.org/2/library/struct.html)模块和['numpy.fromfile'](http:// docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.fromfile.html)。鉴于大量的数据,numpy可能是最简单和最快的。 [Here's](http://stackoverflow.com/questions/14245094/how-to-read-part-of-binary-file-with-numpy)一个例子。如果您遇到问题,我建议您尝试一下并发布具体问题。 – tom10

+0

很抱歉编辑说使用Python 2.7。 – MattS

回答

0

通常,在使用二进制文件时,您会想要使用包和解包(https://docs.python.org/2/library/struct.html)函数。这将允许您控制数据的永久性以及数据类型。在特定情况下,你可能会想先读取头信息,像

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 

    ... 

以上未实际运行或测试,只是想给你一个方法的一般意义。