Может ли Python Pickle сохранять типы объектов и переменных при сбросе списков?

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

[str, str, datetime, str, str, int, int, int, str, str, bool]

Проблема в том, что запрос всей этой информации занимает почти 45 минут, потому что база данных чрезвычайно велика. Чтобы решить эту проблему, я пытаюсь выбрать список, чтобы я мог пока пропустить шаг запроса, пока я пытаюсь протестировать и отладить остальные 90% моего кода. Большая часть остального моего кода выполняет операции с этим списком, но мне нужен список для проверки этих операций.

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

query_object = QueryObject()
item_ids = query_object.get_ids()
print("\nFinished collecting the ID's for", len(item_ids), "items.")
answer = input("Do you wish to load information from the disk or the database? (d = disk, i = database)\n")
if answer == "d":
    file = open('item_information.txt', 'rb')
    items_list = pickle.load(file)
    # pickle loads everything in as a string, so currently I just manually cast each item in the list
    for item in items_list:
        item = [str(item[0]), str(item[1]), str(item[2]), str(item[3]), int(item[4]), int(item[5]), int(item[6]),
                int(item[7]), str(item[8]), str(item[9]), bool(item[10])]
    file.close()
elif answer == "i":
    file = open('item_information.txt', 'wb')
    items_list = query_object.gather_item_list_data(item_ids)
    pickle.dump(items_list, file)
    file.close()
else:
    print("Bad input.", answer)
    sys.exit(1)

# remove all items that aren't usable
items_list[:] = [item for item in items_list if item[9] is True]

Есть ли способ заставить Pickle сбросить формат списка, чтобы когда я pickle.load() я набирал свой список так же, как когда я pickle.dump() его редактировал?

Если pickle загружает все как строку, это потому, что вы сохранили все как строку. Просто не делай этого. Обратите внимание, что ваш цикл for не изменяет загружаемый вами список...

juanpa.arrivillaga 11.06.2019 18:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Pickle обычно загружает все, что вы выгрузили, включая информацию о типе. Например:

example of pickle usage

Поэтому я не уверен, в чем ваша проблема, я полагаю, это зависит от того, что вы на самом деле сбрасываете.

Другие вопросы по теме