2017-02-05 4 views
0

типа Он должен быть простым, но я не знаю:Преобразовать список из типа ул к списку

Я получил file.json с этим содержанием

[{u'key': u'value1'},{u'key': u'value2'}] 

и импортировать его в качестве data

with open(file.json) as fd: 
     data = fd.read() 

Я очень рад, что это работает

>>> print (data) 
[{u'key': u'value1'},{u'key': u'value2'}] 

Но, к сожалению, data превращается теперь в str

>>> print(type(data)) 
<type 'str'> 

Так что я не могу использовать data, чтобы делать вещи, как удаление элементов.

Как мне преобразовать data в обычный список dicts? (<type 'list'>)

+3

Учитывая, что вы знаете, что файл данных в формате JSON, то почему бы не использовать [ 'json' модуль] (https://docs.python.org/3/library/ json.html)? – jonrsharpe

+3

Это не JSON. Где ты это взял? –

ответ

3

Если вы используете метод файла .read(), вы всегда получаете строку. Вам придется разобрать его самостоятельно, но, к счастью, у Python есть json module, который выполняет все синтаксические разборки для вас. Он даже читает файл:

import json 
with open(file.json) as fd: 
    data = json.load(fd) 

Но, как Стефан указал, ваш файл не является действительным JSON - это скорее похоже на repr() выходе объекта Python. В этом случае, это почти так же просто:

import ast 
with open(file.json) as fd: 
    data = ast.literal_eval(fd.read()) 
+1

Вы пробовали это с их данными? Это не работает для меня, так как их данные недействительны JSON. –

+0

@StefanPochmann: Действительно, это недействительно JSON. Спасибо, что заметили. –

+0

@Stefan Вы, вероятно, правы.OP открывал файл в виде строки и печатал его (как строку, а не JSON), поэтому вы говорите, что маркеры Unicode находятся в файле –

1

Очень простая библиотека json.

import json 
obj = json.loads(json_string) 

Deserialize json_string (json_string является ул или Юникода экземпляр, содержащий документ JSON) на объект Python (dixt в нашем случае).

EDIT:

Как отмечает Стефан, это не является допустимым JSON (это выглядит как список), и поэтому вы можете увидеть ответ Тима.

+1

Вы можете загрузить файл напрямую, нет необходимости в строке –

+1

Вы правы, но Тим уже написал этот ответ, поэтому я не хочу дублировать его ответ. @ cricket_007 –

+0

Вы пробовали его со своей строкой? Это не работает для меня, так как их данные недействительны JSON. –

Смежные вопросы