我创建了一个程序,该程序可以创建很长的数据列表。最终,我想将这些列表聚合到一个数据框中-但是要花几个小时才能运行,并且由于错误或异常,在那段时间可能会崩溃。我将修复此问题,但与此同时,我想使列表保持不变,以便程序可以从中断处重新开始。
第一个问题:泡菜是这样做的合适方法吗?
我的方法:要腌制列表,我要通过变量列表(字符串)来工作,这些变量是列表名称(列表名称)。然后尝试从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:需要一个整数(got类型为str)”,但是,我认为我需要将列表腌制为“ something.pickle”,这是一个字符串。
也请您大致批评我的代码。谢谢
答案 0 :(得分:1)
您对泡菜转储的说法不正确。
pickle.dump(dct[i], open(picknm,"wb"))
首先是数据,然后是文件句柄。
但是,如果打开失败,真的看不到保存空白列表的意思吗?