#python #list #dictionary #pickle
#python #Список #словарь #обработка
Вопрос:
Я создал программу, которая создает длинные списки данных. В конечном итоге я хочу объединить эти списки в dataframe — но для запуска требуются часы, и за это время может произойти сбой из-за ошибок или исключений. Я исправлю это, но в то же время я хочу сделать списки постоянными, чтобы программа могла снова запускаться с того места, на котором она остановилась.
Первый вопрос: является ли 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: требуется целое число (получен тип str)», однако, я думаю, мне нужно выбрать список как «something.pickle», который является строкой.
Также, пожалуйста, можете ли вы в целом критиковать мой код. Спасибо
Комментарии:
1. Конечно, вы можете видеть, что
open(dct[i],picknm,"wb")
это не может быть правильным?2. @Aran-Fey нет, я этого не видел. Иногда вы не видите ошибок в своем собственном коде, верно?
Ответ №1:
У вас неправильные аргументы для дампа pickle.
pickle.dump(dct[i], open(picknm,"wb"))
Сначала данные, затем дескриптор файла.
Но на самом деле не вижу смысла сохранять пустой список, если он не открывается?
Комментарии:
1. Спасибо за ответ! Я упустил из виду свою ошибку. Итак, что я имею в виду под «сохранением пустого списка, если он не открывается», так это то, что программа попытается открыть файл pickle, содержащий список, но если файл pickle не существует, то она создаст пустой список, например ‘ listname1=[] ‘, а затем обработает этот список, например ‘pickle.dump(dct[i], open(picknm,»wb»)) ‘
2. Хорошо 🙂 Я понял. Но теперь вопрос решен?
3. Да, это так. Любые другие комментарии к моему коду были бы полезны. Спасибо за ваш вклад!
4. В некоторых других комментариях вы индексируете словарь по-другому, вы получите тот же результат, но это выглядит странно.
dct[i]
в блоке try иdct['%s' % i]
в блоке except.5. Спасибо за вашу помощь.