无法删除python添加的json字符串中的其他双引号

2024-09-30 14:27:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件,它的内容是

{'FileID': 'a3333.txt','Timestamp': '2014-12-05T02:01:28.271Z','SuccessList':'a,b,c,d,e'}

当我使用python读取文件时,得到的字符串为

^{pr2}$

我希望删除字符串开头和结尾的双引号。从python文档中,我了解到,如果字符串中有单引号,python会自行添加双引号以避免转义。在


Tags: 文件字符串文档txt内容结尾timestamp双引号
3条回答

您可以使用

import re
x="{'FileID': 'a3333.txt','Timestamp': '2014-12-05T02:01:28.271Z','SuccessList':'a,b,c,d,e'}"
print dict(re.findall(r"""'([^']*)'\s*:\s*'([^']*)'""",x))

如果您的字符串实际上包含双引号(可能不是,因为它们可能只是打印表示的一部分),您可以用一个切片来去掉它们,例如

>>> hello = '"hello more stuff things"'
>>> hello
'"hello more stuff things"'
>>> hello[1:-1]
'hello more stuff things'

注意,在这种情况下,外部单引号不是字符串的一部分,它们只是打印表示的一部分。在

如果存储的文件是JSON格式,则它们是无效的。JSON格式不允许使用单引号来分隔字符串。假设在键/值字符串中没有单引号,可以用双引号替换单引号,然后使用JSON模块读入:

import json
x = "{'FileID': 'a3333.txt','Timestamp': '2014-12-05T02:01:28.271Z','SuccessList':'a,b,c,d,e'}"
x = x.replace("'", '"')
j = json.loads(x)
print j

产量:

^{pr2}$

或者:

如果数据是Python dict的字符串表示,则可以使用eval读入它。使用eval是危险的(参见Ned Batchelder对此的想法)。也就是说,如果您自己编写了该文件,并且确信它不包含恶意代码,则可以使用eval将该字符串作为Python源代码读取:

x = "{'FileID': 'a3333.txt','Timestamp': '2014-12-05T02:01:28.271Z','SuccessList':'a,b,c,d,e'}"
eval(x, {'__builtins__': {}})

产量:

^{pr2}$

不过,别养成这种习惯!正确的方法是以适当的序列化格式将数据保存到文件中,然后使用json模块这样的库从磁盘读取数据。在

相关问题 更多 >