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"))
首先是数据,然后是文件句柄。
但是真的看不出打不开就存空列表的意义吗?
我创建了一个创建长数据列表的程序。最终我想将这些列表聚合到一个数据框中——但是 运行 需要几个小时,并且可能会在那个时候由于错误或异常而崩溃。我会解决这个问题,但同时我想让列表持久化,这样程序就可以从它停止的地方重新开始。
第一个问题: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"))
首先是数据,然后是文件句柄。
但是真的看不出打不开就存空列表的意义吗?