我是网络抓取的新手,但我收集了大量数据,我使用file.write()写入文件,因为我不知道json.dumps()存在。我试图通过重新格式化数据来解决这个问题,以便可以将它作为JSON加载回Python 3。
我需要能够替换字符串中的所有单引号(带双引号)而不替换反斜杠后立即出现的任何单引号。例如:
{'please':'don\'t touch friend\'s cat'}
会变成:
{"please":"don\'t touch friend\'s cat"}
关于重新格式化的任何其他建议也将不胜感激。
答案 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