如何序列化和反序列化打开的文件对象?

时间:2014-10-25 10:33:08

标签: python serialization

有没有办法序列化和反序列化打开的文件对象,这样反序列化的对象就是一个与序列化对象具有相同特征的对象(即全路径,打开模式,偏移,内部缓冲区等) ?

代码方面,它会是这样的:

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()文件的名称和偏移量),但同样适用于压缩文件,其中寻找给定位置可能非常慢。

1 个答案:

答案 0 :(得分:0)

不,这是不可能的。证明:如果关闭文件描述符,则无法在不重新打开文件的情况下重新获取旧对象。文件对象由OS内核定义,而python对此没有控制权,因此无法对它们进行腌制。唯一的方法是挑选路径,模式和字节偏移量,当取消打开时,重新打开文件并移动到正确的位置。

在任何情况下,我根本不认为挑选文件是个好主意,因为文件可能会被删除而unpickling会失败。只需挑选/取消内容。