Python 将列表从str类型转换为list类型

Python 将列表从str类型转换为list类型,python,Python,一定很简单,但我不知道: 我有一个包含此内容的file.json [{u'key': u'value1'},{u'key': u'value2'}] 并将其作为数据导入 with open(file.json) as fd: data = fd.read() 我很高兴这能奏效 >>> print (data) [{u'key': u'value1'},{u'key': u'value2'}] 但不幸的是,数据现在被转换为str >>> p

一定很简单,但我不知道:

我有一个包含此内容的file.json

[{u'key': u'value1'},{u'key': u'value2'}]
并将其作为
数据导入

with open(file.json) as fd:
        data = fd.read()
我很高兴这能奏效

>>> print (data)
[{u'key': u'value1'},{u'key': u'value2'}]
但不幸的是,
数据
现在被转换为
str

>>> print(type(data))
<type 'str'>
打印(类型(数据))
因此,我不能使用
数据
来执行删除项目之类的操作


如何将
数据
转换为普通的dict列表?(

使用json库非常简单

import json
obj = json.loads(json_string) 
将json_字符串(json_字符串是包含json文档的str或unicode实例)反序列化为Python对象(本例中为dixt)

编辑:


正如Stefan提到的,这不是一个有效的json(看起来像一个列表),因此您可以看到Tim的答案。

使用json库非常简单

import json
obj = json.loads(json_string) 
将json_字符串(json_字符串是包含json文档的str或unicode实例)反序列化为Python对象(本例中为dixt)

编辑:


正如Stefan提到的,这不是一个有效的json(看起来像一个列表),因此您可以看到Tim的答案。

如果您使用file方法
.read()
,您总是会得到一个字符串。您必须自己解析它,但幸运的是,Python有一个可以为您完成所有解析的工具。它甚至读取文件:

import json
with open(file.json) as fd:
    data = json.load(fd)
但是,正如Stefan所指出的,您的文件不是有效的JSON——它看起来更像Python对象的
repr()
输出。在这种情况下,它几乎同样简单:

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

如果使用file方法
.read()
,则始终会得到一个字符串。您必须自己解析它,但幸运的是,Python有一个可以为您完成所有解析的工具。它甚至读取文件:

import json
with open(file.json) as fd:
    data = json.load(fd)
但是,正如Stefan所指出的,您的文件不是有效的JSON——它看起来更像Python对象的
repr()
输出。在这种情况下,它几乎同样简单:

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


既然您知道文件是JSON数据,为什么不使用呢?那不是JSON。你从哪里得到的?既然你知道文件是JSON数据,为什么不使用呢?那不是JSON。你从哪里得到的?你可以直接加载文件,不需要字符串。你说得对,但是蒂姆已经写了这个答案,所以我不想重复他的答案@板球你用他们的绳子试过了吗?这对我不起作用,因为他们的数据不是有效的JSON。@StefanPochmann,你说得对,我添加了一段代码,支持OP的字符串。谢谢@omri_saadon,新代码对我不起作用,只是将字符串作为一个整体放入一个奇怪的数组中(甚至不允许使用
…[0]
进行访问)。另外,你更改了他们的数据,删除了
u
前缀。你可以直接加载文件,不需要字符串。你说得对,但是蒂姆已经写了这个答案,所以我不想重复他的答案@板球你用他们的绳子试过了吗?这对我不起作用,因为他们的数据不是有效的JSON。@StefanPochmann,你说得对,我添加了一段代码,支持OP的字符串。谢谢@omri_saadon,新代码对我不起作用,只是将字符串作为一个整体放入一个奇怪的数组中(甚至不允许使用
…[0]
进行访问)。此外,您还更改了他们的数据,删除了
u
前缀。您用他们的数据尝试过吗?这对我不起作用,因为他们的数据不是有效的JSON。@StefanPochmann:事实上,这不是有效的JSON。谢谢你的注意。@Stefan你可能是对的。OP以字符串的形式打开文件,并将其打印(以字符串的形式,而不是JSON),所以您说unicode标记在file@cricket_007是的,还有单引号,应该是双引号。@Stefan我自己得到了这个奇怪的文件。我将csv转换为名为
result
的列表,并将其与
file.write(str(result))
一起保存。在你的提示下,我解决了我的问题,没有创造它。我刚刚用
json.dump(结果,文件)
保存了我的列表,现在我可以像@Tim descripes(
json.load(文件)
一样导入它了。谢谢大家!你用他们的数据试过了吗?这对我不起作用,因为他们的数据不是有效的JSON。@StefanPochmann:事实上,这不是有效的JSON。谢谢你的注意。@Stefan你可能是对的。OP以字符串的形式打开文件,并将其打印(以字符串的形式,而不是JSON),所以您说unicode标记在file@cricket_007是的,还有单引号,应该是双引号。@Stefan我自己得到了这个奇怪的文件。我将csv转换为名为
result
的列表,并将其与
file.write(str(result))
一起保存。在你的提示下,我解决了我的问题,没有创造它。我刚刚用
json.dump(结果,文件)
保存了我的列表,现在我可以像@Tim descripes(
json.load(文件)
一样导入它了。谢谢大家!