簡體   English   中英

如何序列化和反序列化打開的文件對象?

[英]How to serialize and deserialize an open file object?

有沒有一種方法可以對打開的文件對象進行序列化和反序列化,以使反序列化的對象是具有與序列化對象相同的特性的對象(例如,全路徑,打開模式,偏移量,內部緩沖區等)?

就代碼而言,將是這樣的:

import some_pickle_like_module as splm

with open("infile.bin", "rb") as fp:
    first17bytes = fp.read(17)

    with open("infile.splm", "wb") as pkl:
        splm.dump(fp, pkl)

# and later in the code:

with open("infile.splm", "rb") as pkl:
    fp = splm.load(pkl)

next17bytes = fp.read(17)
fp.close()

請注意,此示例有點瑣碎(因為我可以dump()和load()文件的名稱和偏移量),但是同樣適用於壓縮文件,在壓縮文件中查找給定位置可能非常慢。

不,不可能。 證明:如果關閉文件描述符,則無法在不重新打開文件的情況下取消獲取舊對象而無法重新選擇。 文件對象是由OS內核定義的,而python沒有對此的控制權,因此無法使它們腌制。 唯一的方法是腌制路徑,模式和字節偏移,然后在解腌時重新打開文件並移至正確的位置。

無論如何,我都不認為對文件進行腌制不是一個好主意,因為文件可能會被刪除,並且解腌失敗。 只需腌制/解開內容物即可。

暫無
暫無

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

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