加载字典的字符串表示形式,在其值中使用单引号作为字典文字



我正在尝试解析一些日志,其中显示了一些python字典,并从中提取值。

示例输入类似于{'name' : 'D'Artagnan'}ast lib的literal_eval((给出了一个无效的语法错误,而json.loads((要求所有引号都是双引号,但如果我用双引号替换所有引号,它将变成{"name" : "D"Artagnan"},这是无效的,因为name的值现在是D,然后它需要逗号分隔符来获取下一个键值对。

名称的类型并不总是以相同的方式格式化(例如<single_quote>,就像D‘Artagnan中的那样,但它们之间或之后有时有空格或没有空格(例如"not Something"(。

我环顾四周,但当其他人也有类似的问题时,我没有找到能帮助我解决这个问题的东西。到目前为止,我发现的唯一解决方法是根据具体情况处理它们,编写一个try-except子句,通过在日志文件中写下攻击性的行,然后读取文件(作为人(,并创建类型的if-elif案例来处理JSONDecodeErrors

if "D'Artagnan" in line:
line = line.replace("'","'")

它解决了问题,但很乏味,产生了不必要的开销,并跳过值,直到我修复它,我觉得这是非常错误的。欢迎任何帮助!

谢谢!

如果需要转义那些'字符,我认为re模块可能会有所帮助。

import ast
import re
data = "{'name' : 'D'Artagnan'}"
data = re.sub(r"(w)'(w)", r"1\'2", data)
print(ast.literal_eval(data))

应该给你一本字典:

{'name': "D'Artagnan"}

最新更新