将整个二进制文件读入Python

2024-09-24 06:32:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从Python导入一个二进制文件——内容是有符号的16位整数,big endian。

下面的堆栈溢出问题建议如何一次拉入几个字节,但这是一种放大到整个文件中读取的方法吗?

我想创建一个函数,比如:

from numpy import *
import os

def readmyfile(filename, bytes=2, endian='>h'):
    totalBytes = os.path.getsize(filename)
    values = empty(totalBytes/bytes)
    with open(filename, 'rb') as f:
        for i in range(len(values)):
            values[i] = struct.unpack(endian, f.read(bytes))[0]
    return values

filecontents = readmyfile('filename')

但这相当慢(文件是165924350字节)。有更好的办法吗?


Tags: 文件inimport内容字节bytesos二进制
3条回答

我会直接读到EOF(这意味着检查是否接收到空字符串),然后不再需要使用range()和getsize。
或者,使用xrange(而不是range)应该可以改进一些东西,特别是对于内存使用来说。
此外,正如falmari所建议的那样,同时读取更多的数据将大大提高性能。

也就是说,我不会期待奇迹的出现,因为我不确定一个列表是存储所有这些数据的最有效方法。
使用NumPy的数组及其工具来read/write binary files怎么样?在这个link中,有一节是关于使用numpyio.fread读取原始二进制文件的。我相信这正是你所需要的。

注:就我个人而言,我从来没有使用过NumPy;然而,它的主要目的恰恰是处理大数据集——这就是你在问的问题。

使用numpy.fromfile

一次读取和解包两个字节

values[i] = struct.unpack(endian,f.read(bytes))[0]

为什么不一次读1024字节呢?

相关问题 更多 >