替换反斜杠后立即替换所有单引号

时间:2017-12-17 06:29:43

标签: python json python-3.x

我是网络抓取的新手,但我收集了大量数据,我使用file.write()写入文件,因为我不知道json.dumps()存在。我试图通过重新格式化数据来解决这个问题,以便可以将它作为JSON加载回Python 3。

我需要能够替换字符串中的所有单引号(带双引号)而不替换反斜杠后立即出现的任何单引号。例如:

{'please':'don\'t touch friend\'s cat'}

会变成:

{"please":"don\'t touch friend\'s cat"}

关于重新格式化的任何其他建议也将不胜感激。

3 个答案:

答案 0 :(得分:2)

如果您将数据写入文件而实际上并未将其编码为JSON,则很可能是#34;编码"作为对象的repr(),它应该是简单数据类型的有效Python代码。您可以使用ast.literal_eval

再次解析它
In [3]: import ast

In [4]: ast.literal_eval(r"{'please':'don\'t touch friend\'s cat'}")
Out[4]: {'please': "don't touch friend's cat"}

答案 1 :(得分:1)

使用负面的lookbehind https://docs.python.org/3/library/re.html

import re

pattern = re.compile(r"(?<!\\)'")
print re.sub(pattern, '"', text)

答案 2 :(得分:0)

使用带有re模块的正则表达式可以非常轻松地完成此操作。如果您可以将数据作为字符串加载到内存中,那么您只需执行:

re.sub(r'(?<!\\)\'', '"', my_data_string)

它的作用是匹配所有不带反斜杠的单引号,并用双引号替换它们。您可以在此处找到有关其工作原理的更多详细信息:https://docs.python.org/3/library/re.html