#python
Вопрос:
У меня есть файл с именем classnames.txt
, который представляет собой маринованный объект, представляющий набор python.
Вот код инициализации:
import pickle
names = {"dummy value"}
with open("classnames.txt", "wb") as f:
pickle.dump(names, f)
В другом файле я записываю и читаю classnames.txt
, обновляя маринованный объект по мере необходимости. Мои основные операции (в порядке частоты, от высокого к низкому) — это поиск элементов в наборе ( x not in s
), добавление элементов в набор и повторение набора.
Однако весь этот процесс добавляет около 1-2 секунд времени выполнения, и общий процесс кажется мне неэффективным. Существует ли более быстрый способ хранения и доступа к этим данным?
Комментарии:
1. Конечно, есть. Концепция, которую вы ищете, — это «база данных». Я бы подумал
sqlite
, что это, встроенное в Python, было бы идеальным выбором.2. Вам, вероятно, следует подумать о модуле «json»
3. Не по теме: ИМО помещать двоичные данные в текстовый файл довольно странно (и тоже напрашиваться на неприятности).
4. @Fredericka Я действительно рассматривал это, но я прочитал в другом посте SO, что наборы не сериализуются как json, и я хотел, чтобы поиск O(1), который предоставляют наборы
5. Проблема, о которой я думал, заключалась в том, что
.txt
файлы обычно считаются удобочитаемыми для человека, и нажатие на один из них, скорее всего, запустит приложение для редактирования текста, у которого наверняка возникнут проблемы с содержимым вашего файла. Расширение файла часто используется для указания типа содержащихся в нем данных, и вы нарушаете соглашение. Да, вам нужно использовать двоичные файлы сpickle
(за возможным исключением версии протокола0
, которая «удобочитаема»), просто не давайте ему этого расширения. Я предлагаю использовать.pkl
или, может.bin
быть (для них нет стандарта AFAIK).
Ответ №1:
Конечно, есть. Концепция, которую вы ищете, — это «база данных». Я бы подумал, что sqlite, встроенный в Python, был бы идеальным выбором.