我对网页抓取很新,但我收集了大量数据,我使用file.write()写入文件,因为我不知道json.dumps()存在。我试图通过重新格式化数据来解决这个问题,以便它可以作为JSON加载回Python 3。
我需要能够替换字符串中的所有单引号(带双引号)而不替换反斜杠后立即出现的任何单引号。例如:
{'please':'don\'t touch friend\'s cat'}
会成为:
{"please":"don\'t touch friend\'s cat"}
关于重新格式化的任何其他建议也将不胜感激。
如果您将数据写入文件而不实际将其编码为JSON,则很可能将其“编码”为对象的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"}
使用负面的lookbehind https://docs.python.org/3/library/re.html
import re
pattern = re.compile(r"(?<!\\)'")
print re.sub(pattern, '"', text)
使用带有re
模块的正则表达式可以非常轻松地完成此操作。如果您可以将数据作为字符串加载到内存中,那么您只需执行:
re.sub(r'(?<!\\)\'', '"', my_data_string)
它的作用是匹配所有不带反斜杠的单引号,并用双引号替换它们。你可以在这里找到更多关于它如何工作的血腥细节:https://docs.python.org/3/library/re.html