Редактирование маринованных данных - PullRequest
4 голосов
/ 27 мая 2011

Мне нужно сохранить сложный фрагмент данных:

list = ["Animals", {"Cats":4, "Dogs":5}, {"x":[], "y":[]}]

Я планировал сохранить несколько из этих списков в одном файле, а также планировал использовать модуль pickle для сохранения этих данных. Я также хочу иметь доступ к маринованным данным и добавлять элементы в списки во 2-м словаре. Поэтому после того, как я распакую данные и отредактирую, список может выглядеть так:

list = ["Animals", {"Cats":4, "Dogs":5}, {"x"=[1, 2, 3], "y":[]}]

Предпочтительно, я хочу сохранить этот список (используя pickle) в том же файле, из которого я взял этот фрагмент данных. Однако, если я просто перенесу данные в один и тот же файл (скажем, я изначально сохранил их в «Файл»), я получу две копии одного и того же списка в этом файле:

a = open("File", "ab")
pickle.dump(list, a)
a.close()

Есть ли способ заменить отредактированный список в файле с помощью функции pickle вместо добавления второй (обновленной) копии? Или есть другой способ, который я должен рассмотреть для сохранения этих данных?

Ответы [ 2 ]

3 голосов
/ 27 мая 2011

Я думаю, вы хотите модуль полки.Он создает файл (использует pickle под капотом), который содержит содержимое переменной, доступной по ключу (например, постоянный словарь).

3 голосов
/ 27 мая 2011

Вы можете открыть файл для записи вместо добавления - тогда изменения перезапишут предыдущие данные.Это, однако, проблема, если в этом файле хранится больше данных.Если вы действительно хотите выборочно заменить данные в заархивированном файле, я боюсь, что это не будет работать с замаскированнымЕсли это обычная операция, проверьте, помогает ли вам что-то вроде базы данных sqlite.

...