簡體   English   中英

在Python中按字節讀取二進制文件的最快方法

[英]The fastest way to read binary files by bytes in Python

我正在制作一個程序,該程序應該能夠使用霍夫曼算法對任何類型的文件進行編碼。 都可以,但是在大文件上使用它太慢了(至少我認為是這樣)。 當我嘗試打開120MB的mp4文件進行解壓縮時,花了大約210秒鍾的時間才讀取該文件。 更不用說這樣做花費了大量的內存。 我認為使用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)

您的方法是將文件加載到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(data)將接收哪種數據類型。 我會盡量避免使用字符串。

通話文檔在這里: http : //docs.scipy.org/doc/numpy/reference/genic/numpy.fromfile.html

  • 我想聽聽評論中的速度差異:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM