在Python中按字节读取二进制文件的最快方法

时间:2015-10-30 08:46:40

标签: python file binaryfiles

我正在制作一个程序,它应该能够使用霍夫曼算法对任何类型的文件进行编码。一切正常,但在大文件上使用它太慢了(至少我认为是这样)。当我试图打开一个120MB的mp4文件来打开包装时,我花了大约210s来读取文件。更不用说它需要大量的内存才能这样做。我认为使用struct解压缩会很有效,但它不是。在python中没有更有效的方法吗?我需要按字节读取任何文件,然后将其传递给字符串中的huffman方法。

if __name__ == "__main__":
    start = time.time()
    with open('D:\mov.mp4', 'rb') as f:
        dataL = f.read()
    data = np.zeros(len(dataL), 'uint8')

    for i in range(0, len(dataL)):
        data[i] = struct.unpack('B', dataL[i])[0]

    data.tostring()

    end = time.time()
    print("Original file read: ")
    print end - start

    encoded, table = huffman_encode(data)

1 个答案:

答案 0 :(得分:2)

您的方法是将文件加载到python对象中 - >创建一个空的Numpy数组,然后使用Python迭代器逐位填充Numpy数组。

让我们走出中间人:

if __name__ == "__main__":
    start = time.time()
    data = np.fromfile('d:\mov.mp4', dtype=np.uint8, count=-1)
    end = time.time()
    print("Original file read: ")
    print end - start
    encoded, table = huffman_encode(data)

如何处理数据'取决于您的huffman_encode(数据)将接收的数据类型。我会尽量避免使用字符串。

有关电话的文档位于:http://docs.scipy.org/doc/numpy/reference/generated/numpy.fromfile.html

  • 我很想知道评论中的速度差异:)