[英]Python read file by bytes until sequence of bytes
如何在Python中逐字節讀取文件,直到達到特定的字節順序?
對於讀取特定種類的文件以解析標頭,掃描參數等的庫,這必須始終發生。
例如:我正在閱讀PNG規范,並看到像素數據在字節序列IDAT
之后開始。
我可以這樣讀取文件:
with open('image.png', 'rb') as f:
byte = f.read(1)
while byte != '':
byte = f.read(1)
但是由於我一次只讀取一個字節,所以我無法直接監視IDAT
(因為我只會得到I
而不會得到其他三個字節)。 我無法按四個字節的塊讀取文件,因為它不會始終正確對齊。
我可以想象跟蹤最后四個字節,但想想也許還有一種更優雅的方法?
如果您IDAT
逐字節讀取字節的想法,則可以讀取一個長字符串中的數據,然后根據IDAT
的出現將其IDAT
。
with open('image.png', 'rb') as f:
lines = f.readlines()
combined_line = b''.join(lines)
IDAT_splited = combined_line.split(b'IDAT')[1:]
使用mmap
並將文件視為巨型字符串。
import mmap
with open('image.png', 'rb') as f:
with mmap.mmap(f.fileno(), 0, mmap.PROT_READ) as mf:
offset = mf.find(b'IDAT')
if offset == -1:
raise Exception("IDAT not found")
f.seek(offset)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.