如何从字节文件中读取一次整数?

时间:2014-06-27 15:32:48

标签: python file

我想使用python从.yuv文件中读取数据。这些数据是uint8整数。我使用这样的命令:

fp = open(filename, 'rb')
data = fp.read(100)

我将获得100字节数据作为字符串。我知道我可以使用ord()将1字节str转换为1个整数一次。如何一次读取或将其传输到阵列中的100个整数?

3 个答案:

答案 0 :(得分:2)

使用struct.unpack

with open(filename, 'rb') as fp:
    integers = struct.unpack('100B', fp.read(100))

答案 1 :(得分:0)

您可以使用列表推导将其全部转换为:

data = [ord(b) for b in fp.read(100)]

答案 2 :(得分:0)

您可能也想使用numpy

import numpy as np

with open(filename, 'rb') as fp:
    integers = numpy.fromstring(fp.read(100), dtype='uint8')

这可以说更容易(并且在记忆方面可能更有效):

integers = numpy.fromfile(filename, dtype='uint8')

当然,对于100或1000个整数并不重要,struct解决方案是一个很好的解决方案,不需要任何extrenal模块。但是,如果您要阅读大量数据,并且想要对它们进行一些数学运算,numpy.array是一种非常有用的数据类型。 numpy数组可以与具有合理性能的高达数千兆字节的数据一起使用。

如果您有大文件,可以考虑使用numpy.memmap。它的好处是它根本不会将数组真正加载到内存中。它非常适合随机访问,因为只在需要时才加载数组。对于顺序访问,它并不是那么好,因为操作系统使用预读cahces和其他技术优化顺序访问。对于随机访问或只访问一小部分数组,很难用大型阵列进行访问。