【问题标题】:Unpacking a binary file with Python only returns one value用 Python 解压二进制文件只返回一个值
【发布时间】:2015-11-19 21:40:26
【问题描述】:

我有一个包含一列值的二进制文件。使用 Python 3,我正在尝试将数据解压缩到数组或列表中。

file = open('data_ch04.dat', 'rb')

values = struct.unpack('f', file.read(4))[0]

print(values)

file.close()

上面的代码只向控制台打印一个值:

-1.1134038740480121e-29

如何从二进制文件中获取所有值?

这是 Dropbox 上二进制文件的链接:

https://www.dropbox.com/s/l69rhlrr9u0p4cq/data_ch04.dat?dl=0

【问题讨论】:

    标签: python python-3.x binary unpack


    【解决方案1】:

    您的代码只显示一个float,因为它只读取四个字节。

    试试这个:

    import struct
    
    # Read all of the data
    with open('data_ch04.dat', 'rb') as input_file:
        data = input_file.read()
    
    # Convert to list of floats
    format = '{:d}f'.format(len(data)//4)
    data = struct.unpack(format, data)
    
    # Display some of the data
    print len(data), "entries"
    print data[0], data[1], data[2], "..."
    

    【讨论】:

    • 我注意到如果使用 big-endian >f 或 little-endian <f 来解包数据,值会有所不同。是否可以判断哪种方法对这种类型的文件是正确的?
    • 一般不,不。我会问制作文件的人什么是字节顺序。或者,您可以两种方式运行它,看看哪一种产生“合理”的数字。
    • 我将尝试找出有关数据的更多详细信息,但您的示例似乎有效。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多