【发布时间】:2019-03-26 11:47:05
【问题描述】:
我创建了一个创建长数据列表的程序。最终,我想将这些列表聚合到一个数据框中——但它需要几个小时才能运行,并且可能由于错误或异常而在这段时间内崩溃。我会解决这个问题,但同时我想让列表持久化,这样程序就可以从中断的地方重新开始。
第一个问题:pickle 是一种合适的方法吗?
我的方法:为了腌制列表,我通过一个变量列表(字符串)来处理列表名称(listnames)。然后尝试从pickle加载每个,如果由于文件不存在而失败,那么它将创建一个空白列表。这些列表都被放入字典中。然后将每个列表腌制为 list_name.pickle。
listnames=["listname1","listname2","listname3","listname4","listname5","listname6","slistname7"]
dct = {}
for i in listnames:
picknm=i+".pickle"
try:
dct[i]= pickle.load(open(picknm, "rb"))
print("List ",i," loaded from pickle")
except:
dct['%s' % i] = []
print("List ",i," failed to load from pickle. List is blank: ",dct[i]," Saving to pickle as",picknm)
pickle.dump(open(dct[i],picknm,"wb"))
我无法让最后一行代码工作。错误是“TypeError: an integer is required (got type str)”,但是,我想我需要将列表腌制为“something.pickle”,它是一个字符串。
另外请你一般地批评我的代码。谢谢
【问题讨论】:
-
您肯定可以看到
open(dct[i],picknm,"wb")不可能是正确的吗? -
@Aran-Fey 不,我没有看到。有时您在自己的代码中看不到错误,对吧?
标签: python list dictionary pickle