[英]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.