有没有办法序列化和反序列化打开的文件对象,这样反序列化的对象就是一个与序列化对象具有相同特征的对象(即全路径,打开模式,偏移,内部缓冲区等) ?
代码方面,它会是这样的:
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()文件的名称和偏移量),但同样适用于压缩文件,其中寻找给定位置可能非常慢。
答案 0 :(得分:0)
不,这是不可能的。证明:如果关闭文件描述符,则无法在不重新打开文件的情况下重新获取旧对象。文件对象由OS内核定义,而python对此没有控制权,因此无法对它们进行腌制。唯一的方法是挑选路径,模式和字节偏移量,当取消打开时,重新打开文件并移动到正确的位置。
在任何情况下,我根本不认为挑选文件是个好主意,因为文件可能会被删除而unpickling会失败。只需挑选/取消内容。