for 循环中的酸洗列表

Pickling lists in a for loop

我创建了一个创建长数据列表的程序。最终我想将这些列表聚合到一个数据框中——但是 运行 需要几个小时,并且可能会在那个时候由于错误或异常而崩溃。我会解决这个问题,但同时我想让列表持久化,这样程序就可以从它停止的地方重新开始。

第一个问题: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",这是一个字符串。

也请您对我的代码进行一般性的批评。谢谢

泡菜转储的参数有误。

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

首先是数据,然后是文件句柄。
但是真的看不出打不开就存空列表的意义吗?