Более быстрый способ доступа к элементам, чем наборы

#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, был бы идеальным выбором.

https://docs.python.org/3/library/sqlite3.html