转储之后从文件读取对象然后到文件

时间:2010-12-18 13:05:46

标签: python pickle

我已经创建了一个将对象写入文件的函数:

def StoreToFile(Thefile,objekt):
    utfil=None
    utfil=open(Thefile,'wb')
    pickle.dump(objekt,utfil)
    return True
    if utfil is not None:
    utfil.close()

我的代码使用此功能:

for st in Stadion:
    StoreToFile(r'C:\pytest\prod.psr',st)

这就像魅力一样,但是如何将对象放回列表对象?

我有提取对象的代码,但是我无法看到如何遍历对象以将它们放入新列表中。 到目前为止,我有这个:

def ReadFromFile(filename):
    infile=None
    infile=open(filename,'rb')
    objekt=pickle.load(infile)

4 个答案:

答案 0 :(得分:2)

for st in Stadion:
    StoreToFile(r'C:\pytest\prod.psr',st)
  

这就像一个魅力。

如果你的意思是“运行没有错误”,那么是的,它确实“有效”。此代码重复覆盖该文件,因此它只包含列表中的最后一项。

请改用:

StoreToFile(r'C:\pytest\prod.psr', Stadion)

你的ReadFromFile()函数应该可以正常工作并返回一个列表(假设上面的修复)。

也不确定这是做什么的:

return True
if Thefile.close()

答案 1 :(得分:2)

你的代码很愚蠢,utfil = None业务没有意义,因为open(...)失败的唯一方法是异常,在这种情况下,函数的其余部分无论如何都不会被执行。正确的方法是使用上下文管理器with语句。

相反,请执行:

def storeToFile(path, o):
    try:
        with open(path, "wb") as f:
            pickle.dump(o, f)
            return True
    except pickle.PicklingError, IOError:
        return False

答案 2 :(得分:1)

你应该挑选整个清单。

答案 3 :(得分:0)

要将对象挑选到同一文件,请使用此功能:

def storeToFile(fileName, o):
    try:
        with open(fileName, "a") as file:
            cPickle.dump(o, file)
            return True
    except pickle.PicklingError, IOError:
        return False

请注意,文件以模式"a"打开,以便将新数据附加到结尾。

要再次加载对象,请使用:

def loadEntireFile(fileName):
    try:
        with open(fileName) as file:
            unpickler = cPickle.Unpickler(file)
            while True:
                yield unpickler.load()
    except EOFError:
        pass

此函数尝试从文件中加载对象,直到遇到EOFfoo = [str(x) for x in range(10)] for x in foo: storeToFile("test.pickle", x) foo2 = list(load("test.pickle")) 表示。您可以像这样使用它:

loadEntireFile

EOFError函数接受任何list并从中构建一个列表。函数{{1}}包含iterable语句,使其成为yield,因此可以将其传递给任何采用迭代的函数。