2010-08-09 3 views
2

Я хотел бы написать список в файл и прочитать содержимое файла в списке. Я могу написать список в файл, используя simplejson следующим образом:Запись списка в файл и чтение содержимого обратно в список с помощью simplejson

f = open("data.txt","w") 
l = ["a","b","c"] 
simplejson.dump(l,f) 
f.close() 

Теперь, чтобы прочитать файл обратно я сделать

file_contents = simplejson.load(f) 

Но, я думаю, file_contents в формате JSON. Есть ли способ конвертировать его в список?

Thank you.

+0

Когда вы печатаете 'file_contents', что вы видите? Не угадывайте, на самом деле показывайте фактическую ценность, пожалуйста. –

+0

Это показывает [u'a ', u'b', u'c '] – Tom

+0

Это означает, что это уже список ... Префикс 'u' говорит, что строки являются unicode, но он делает именно то, что вы хотели. .. –

ответ

6
with open("data.txt") as f: 
    filecontents = simplejson.load(f) 

действительно перезагружает данные точно так, как вы указали. Что может вас смутить, так это то, что все строки в JSON равны Unicode - JSON (например, Javascript) не имеет тип данных «байтовой строки», отличный от «unicode».

Редактировать Я не старый simplejson вокруг больше (поскольку его текущая версия стала частью стандартной библиотеки Python как json), но вот как это работает (изготовление json маскарад, как simplejson в надежде избегая путаю -) ...:

>>> import json 
>>> simplejson = json 
>>> f = open("data.txt","w") 
>>> l = ["a","b","c"] 
>>> simplejson.dump(l,f) 
>>> f.close() 
>>> with open("data.txt") as f: fc = simplejson.load(f) 
... 
>>> fc 
[u'a', u'b', u'c'] 
>>> fc.append("d") 
>>> fc 
[u'a', u'b', u'c', 'd'] 
>>> 

Если это точный код (за вычетом первых двух строк, если то, что вы делаете вместо этого import simplejson конечно ;-) не соответствует тому, что вы наблюдаете, вы» ve нашел ошибку, поэтому очень важно сообщить, какие версии Python и simplejson вы используете, и точно какая ошибка вы получите, в комплекте с трассировкой (отредактируйте свой Q, чтобы добавить это - очевидно, важно - информация!).

+0

Спасибо за ответ. Но им не удалось добавить новые элементы в файлконтент. Например, после filecontents = simplejson.load (f), если я делаю filecontents.append ("d"), программа дает ошибки. Любой способ исправить это? Спасибо. – Tom

+0

@Tom, я просто просмотрел точный код из вашего вопроса на 2.6, который я могу добавить в результирующий список. Кроме того, нет строк unicode. – aaronasterling

+0

@Tom, «дает ошибки» без какой-либо ясности о том, какие из них (отредактируйте свой Q, чтобы добавить трассировку!) Выглядит как попытка не дать кому-либо помочь вам - так же, как полное отсутствие информации о том, что такое версия Python и simplejson версия и простая версия, которую вы используете, конечно ;-). Тем не менее, я отредактировал свой A, чтобы показать, как код не дает мне абсолютно никаких ошибок на Python 2.6 (хотя, конечно, он * делает * дает строки unicode, в отличие от удивительного комментария @ aaron в этом вопросе). –

-1

.read_file и .write_file опции для Unipath действительно делают это простым.