3
下面是一些現有代碼的重要部分,我正在嘗試適應自己的用途。將二進制數據視爲文件對象?
值得注意的部分是,導致一個巨大的文件和raw_file
是從這個巨大的文件中提取(痛苦)的二進制數據。
with open(self.archive, "rb") as f:
f.seek(offset)
raw_file = start + f.read(dlen - len(start))
...
f.write(raw_file)
現有的代碼提取存檔般的文件保存到磁盤中的內容,但我需要僅從這存檔讀取這些存儲文件(如果讓任何意義)。
我需要使用Pygame從這個文件中讀取幾百mbs的數據,通常使用像pygame.image.load()
這樣的方法作爲圖像。而不是讓這段代碼將所有文件的內容寫入磁盤,然後以「非二進制」形式重新讀取它,我想直接執行類似於pygame.image.load(toVirtualFileObject(raw_file))
的操作。有人知道這樣的事嗎?
您可以使用任何類似文件的對象,例如'StringIO';但如果它只有幾MB,則可能會耗盡可用內存,因爲這樣會立即將文件加載到內存中。寫入磁盤並讀取它有什麼問題? –
Burhan,有幾個原因: 1)處理大檔案文件時必須遵守的規則包括我不會將內容提取到磁盤。 2)這會嚴重影響程序的加載時間,以便將數百MB數據寫入磁盤以重新讀取它們。 – SimonT
奇怪的規則?通常,這種提取是作爲安裝過程的一部分完成的 - 這就是爲什麼具有繁重資產庫的程序佔用大量磁盤空間並需要花一些時間來安裝(請考慮MMORPG)。 @jwodder指出你正確的方向。 –