Способы хранения и доступа к большим (~ 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); должно быть достаточно.

  • установка cPickle с помощью python 3.5
  • «EOFError: Ran вне поля ввода» Продолжайте получать эту ошибку, пытаясь рассолить
  • Советы по правильному использованию больших широковещательных переменных?
  • Выравнивание типа расширения Python, определенного как C-структура с элементами PyObject *
  • Взаимосвязь между рассолом и глубиной
  • Pickle не может хранить объект в кэше логарифма django во время тестов?
  • Сохранение объекта (сохранение данных)
  • Как я могу использовать pickle для сохранения dict?
  • Python - лучший язык программирования в мире.