繁体   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