在for循环中酸洗列表

时间:2019-03-26 11:47:06

标签: python list dictionary pickle

我创建了一个程序,该程序可以创建很长的数据列表。最终,我想将这些列表聚合到一个数据框中-但是要花几个小时才能运行,并且由于错误或异常,在那段时间可能会崩溃。我将修复此问题,但与此同时,我想使列表保持不变,以便程序可以从中断处重新开始。

第一个问题:泡菜是这样做的合适方法吗?

我的方法:要腌制列表,我要通过变量列表(字符串)来工作,这些变量是列表名称(列表名称)。然后尝试从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”,这是一个字符串。

也请您大致批评我的代码。谢谢

1 个答案:

答案 0 :(得分:1)

您对泡菜转储的说法不正确。

pickle.dump(dct[i], open(picknm,"wb"))

首先是数据,然后是文件句柄。
但是,如果打开失败,真的看不到保存空白列表的意思吗?