Способы хранения и доступа к большим (~ 10 ГБ) спискам в Python?

У меня есть большой набор строк, которые я использую для изучения естественного языка, и я бы хотел, чтобы он сохранил его в Python.

Я мог бы использовать pickle, но загрузка всего списка в память была бы тогда невозможной (я полагаю), так как она имеет размер около 10 ГБ, и у меня нет такой большой памяти. В настоящее время у меня есть список, хранящийся в библиотеке полки … Полка индексируется строками «0», «1», …, «n», которая немного неуклюжа.

Есть ли более удобные способы хранения такого объекта в одном файле и все еще есть случайный (иш) доступ к нему?

Возможно, лучший вариант – разбить его на несколько списков.

Благодаря!

3 Solutions collect form web for “Способы хранения и доступа к большим (~ 10 ГБ) спискам в Python?”

В зависимости от того, как вы собираетесь получать данные, SQLite3 может быть лучшим подходом. SQLite3 отлично подходит для случайного доступа к реляционным данным, но если ваши данные не очень реляционные, это может не иметь особого смысла. (Даже если у вас все есть номер «id», а затем ваша строка, я думаю, что SQLite3 для базового хранилища ваших строк может быть отличным.)

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

Надеюсь это поможет.

Вы можете рассмотреть возможность использования базы данных; возможно, предложение или строка с одной строкой для каждой строки.

С помощью некоторого Object Relational Mapper (например, sqlalchemy ) вы можете иметь объектно-ориентированное представление данных и перебирать строки или работать с большими подмножествами ваших данных последовательно (если это применимо к вашей задаче).

Кроме того, вы можете хранить дополнительные данные для каждого предложения, чтобы получить более мелкомасштабный контроль над наборами элементов, с которыми вы хотите работать.

Я бы сказал, использовать полку (которая использует бэкэнд bdb) или Sqlite3.
Я бы пошел с SQLite3, для простого списка – таблицы типа CREATE TABLE list(idx int primary key, value text); должно быть достаточно.

  • Как исправить эту ошибку unicode / cPickle в Python?
  • Рассортировать динамически параметризованный подкласс
  • Рассол или json?
  • Сохранение модели в Scikit-Learn?
  • Безопасность JSON против Pickle
  • Python pickle / unpickle список в / из файла
  • Искра не может расчехлять method_descriptor
  • Установка объекта в API кэша Django завершается сбоем из-за ошибки сортировки
  • Почему я не могу мариновать typing.NamedTuple, в то время как я могу разжечь коллекцию.namedtuple?
  • Как сохранить экземпляр объекта libSVM python?
  • pickle быстрее, чем cPickle с числовыми данными?
  • Python - лучший язык программирования в мире.