Python: Как я написал список в файл и затем задерживаю его в память (dict представленный, поскольку строка преобразовывает в dict), позже?

Вы можете сделать это, позвонив

root.state('zoomed')
30
задан Community 23 May 2017 в 11:47
поделиться

5 ответов

Я бы использовал полку , json , yaml или что-то еще, как предлагают другие ответы.

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

Но если вы действительно хотите проанализировать текст dict , он содержит только str ings, int s и tuple s, как вы показали, вы можете использовать ast.literal_eval для его анализа. Это намного безопаснее, так как вы можете ' t eval полные выражения с ним - он работает только с str ings, numbers, tuple s, list s, dict s, bool eans и Нет :

>>> import ast
>>> print ast.literal_eval("{12: 'mydict', 14: (1, 2, 3)}")
{12: 'mydict', 14: (1, 2, 3)}
12
ответ дан 27 November 2019 в 23:21
поделиться

Почему бы не использовать рассол питона ? В Python есть отличный модуль сериализации, который называется pickle. Он очень прост в использовании.

import cPickle
cPickle.dump(obj, open('save.p', 'wb')) 
obj = cPickle.load(open('save.p', 'rb'))

У pickle есть два недостатка:

  • Он небезопасен от ошибочных или ошибочных действий. злонамеренно сконструированные данные. Никогда разобрать данные, полученные от ненадежный или неаутентифицированный источник.
  • Формат не читается человеком.

Если вы используете python 2.6, есть встроенный модуль json . Его так же легко использовать:

import json
encoded = json.dumps(obj)
obj = json.loads(encoded)

Формат Json удобочитаем и очень похож на представление строки словаря в Python. И не имеет таких проблем с безопасностью, как рассол. Но может быть медленнее, чем cPickle.

61
ответ дан 27 November 2019 в 23:21
поделиться

Я бы посоветовал вам использовать YAML для вашего формата файла, чтобы вы могли повозиться с ним на диске

How does it look:
  - It is indent based
  - It can represent dictionaries and lists
  - It is easy for humans to understand
An example: This block of code is an example of YAML (a dict holding a list and a string)
Full syntax: http://www.yaml.org/refcard.html

Чтобы получить его в python, просто easy_install pyyaml. См. http://pyyaml.org/

Он поставляется с простыми функциями сохранения / загрузки файлов, которые я не могу вспомнить прямо сейчас.

4
ответ дан 27 November 2019 в 23:21
поделиться

Запишите его в сериализованном формате, таком как pickle (модуль стандартной библиотеки Python для сериализации) или, возможно, с помощью JSON (который является представлением, которое можно преобразовать, чтобы снова создать представление памяти. ).

0
ответ дан 27 November 2019 в 23:21
поделиться

This solution at SourceForge uses only standard Python modules:

y_serial.py module :: warehouse Python objects with SQLite

"Serialization + persistance :: in a few lines of code, compress and annotate Python objects into SQLite; then later retrieve them chronologically by keywords without any SQL. Most useful "standard" module for a database to store schema-less data."

http://yserial.sourceforge.net

The compression bonus will probably reduce your 6GB dictionary to 1GB. If you do not want a store a series of dictionaries, the module also contains a file.gz solution which might be more suitable given your dictionary size.

0
ответ дан 27 November 2019 в 23:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: