如何莳萝(泡菜)归档?
How to dill (pickle) to file?
这个问题可能看起来有点基础,但无法在互联网上找到我理解的任何内容。如何储存用莳萝腌制的东西?
我走到这一步是为了保存我的构造(pandas DataFrame,其中还包含自定义 类):
import dill
dill_file = open("data/2017-02-10_21:43_resultstatsDF", "wb")
dill_file.write(dill.dumps(resultstatsDF))
dill_file.close()
和阅读
dill_file = open("data/2017-02-10_21:43_resultstatsDF", "rb")
resultstatsDF_out = dill.load(dill_file.read())
dill_file.close()
但是我在阅读时出现错误
TypeError: file must have 'read' and 'readline' attributes
我该怎么做?
为未来的读者编辑: 在使用这种方法(腌制我的 DataFrame)一段时间后,现在我不再这样做了。事实证明,不同的程序版本(包括可能存储在 dill 文件中的对象)可能会导致无法恢复 pickled 文件。现在我确保我想要保存的所有内容都可以表示为一个字符串(尽可能高效)——实际上是一个人类可读的字符串。现在,我将数据存储为 CSV。 CSV 单元格中的对象可以用 JSON 格式表示。这样我就可以确保我的文件在未来的几个月和几年内都是可读的。即使代码发生变化,我也可以通过解析字符串来重写编码器,并且可以通过手动检查来理解 CSV。
只要给它没有read
的文件:
resultstatsDF_out = dill.load(dill_file)
你也可以这样去归档:
with open("data/2017-02-10_21:43_resultstatsDF", "wb") as dill_file:
dill.dump(resultstatsDF, dill_file)
所以:
dill.dump(obj, open_file)
直接写入文件。鉴于:
dill.dumps(obj)
序列化obj
,你可以自己写入文件。
同样:
dill.load(open_file)
从文件中读取,并且:
dill.loads(serialized_obj)
从序列化对象构造一个对象,您可以从文件中读取它。
建议使用with
语句打开文件。
这里:
with open(path) as fobj:
# do somdthing with fobj
与
效果相同
fobj = open(path)
try:
# do somdthing with fobj
finally:
fobj.close()
一旦您离开 with
语句的缩进,文件将立即关闭,即使在出现异常的情况下也是如此。
这个问题可能看起来有点基础,但无法在互联网上找到我理解的任何内容。如何储存用莳萝腌制的东西?
我走到这一步是为了保存我的构造(pandas DataFrame,其中还包含自定义 类):
import dill
dill_file = open("data/2017-02-10_21:43_resultstatsDF", "wb")
dill_file.write(dill.dumps(resultstatsDF))
dill_file.close()
和阅读
dill_file = open("data/2017-02-10_21:43_resultstatsDF", "rb")
resultstatsDF_out = dill.load(dill_file.read())
dill_file.close()
但是我在阅读时出现错误
TypeError: file must have 'read' and 'readline' attributes
我该怎么做?
为未来的读者编辑: 在使用这种方法(腌制我的 DataFrame)一段时间后,现在我不再这样做了。事实证明,不同的程序版本(包括可能存储在 dill 文件中的对象)可能会导致无法恢复 pickled 文件。现在我确保我想要保存的所有内容都可以表示为一个字符串(尽可能高效)——实际上是一个人类可读的字符串。现在,我将数据存储为 CSV。 CSV 单元格中的对象可以用 JSON 格式表示。这样我就可以确保我的文件在未来的几个月和几年内都是可读的。即使代码发生变化,我也可以通过解析字符串来重写编码器,并且可以通过手动检查来理解 CSV。
只要给它没有read
的文件:
resultstatsDF_out = dill.load(dill_file)
你也可以这样去归档:
with open("data/2017-02-10_21:43_resultstatsDF", "wb") as dill_file:
dill.dump(resultstatsDF, dill_file)
所以:
dill.dump(obj, open_file)
直接写入文件。鉴于:
dill.dumps(obj)
序列化obj
,你可以自己写入文件。
同样:
dill.load(open_file)
从文件中读取,并且:
dill.loads(serialized_obj)
从序列化对象构造一个对象,您可以从文件中读取它。
建议使用with
语句打开文件。
这里:
with open(path) as fobj:
# do somdthing with fobj
与
效果相同fobj = open(path)
try:
# do somdthing with fobj
finally:
fobj.close()
一旦您离开 with
语句的缩进,文件将立即关闭,即使在出现异常的情况下也是如此。