簡體   English   中英

Python按字節讀取文件,直到字節序列

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

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