Списки травления в цикле - PullRequest
0 голосов
/ 26 марта 2019

Я создал программу, которая создает длинные списки данных. В конце концов я хочу объединить эти списки в фрейм данных - но для запуска требуются часы, и в этот момент может произойти сбой из-за ошибок или исключений. Я исправлю это, но в то же время я хочу сделать списки постоянными, чтобы программа могла начать снова с того места, где она остановилась.

Первый вопрос: подходит ли рассол для этого?

Мой метод: для выбора списков я работаю со списком переменных (строк), которые являются именами списков (listnames). Затем попробуйте загрузить каждый из них, и если это не удастся из-за того, что файл не существует, он перейдет к созданию пустого списка. Списки все помещены в словарь. Каждый список затем выбирается как 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)», однако, я думаю, что мне нужно выбрать список как «нечто.pickle», которое является строкой.

Также, пожалуйста, можете ли вы вообще критиковать мой код. Спасибо

1 Ответ

1 голос
/ 26 марта 2019

У вас неверные аргументы для дампа.

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

Сначала данные, затем дескриптор файла.
Но разве вы не видите смысла сохранять пустой список, если он не открывается?

...