我有一个txt文件,其中包含一些纯文本和一个json样式的文本块。我想解析txt并将json块提取到python dict对象中。
例如,txt文件可能如下所示:
1234567
asdfjkl
{
"Name": {
"given ": "kevin"
},
"info": [
"asdf",
"fda",
"sdf"
]
}
,每个txt中只有一个合法的json块。在json
包中找不到任何内容。任何帮助将不胜感激。
答案 0 :(得分:3)
正如您所说,JSON始终在后面:
from ast import literal_eval
with open('filename.txt','r') as f:
s=f.read()
print(literal_eval(s[s.index('{')-1:]))
更好地使用json.loads
:
from json import loads
with open('filename.txt','r') as f:
s=f.read()
print(loads(s[s.index('{'):]))
两个输出:
{'Name': {'given ': 'kevin'}, 'info': ['asdf', 'fda', 'sdf']}
答案 1 :(得分:0)
如果您控制输入,请不要这样操作。如果输入端的gal或gal是客户/老板,请屏住呼吸诅咒代码之神,并编写如下帮助函数:
# returns a list of plaintext lines and a json string.
def split_text_and_json(filename):
textlines = []
jsonlines = []
bracketcount = 0
with open(filename) as f:
for line in f.readlines():
bracketcount += line.count('{')
if bracketcount:
jsonlines.append(line)
else:
textlines.append(line)
bracketcount-=line.count('}')
return (textlines, ''.join(jsonlines))
plaintextpart, jsonpart = split_text_and_json('file.txt')
如果始终保证将JSON作为文件的最后一部分,则可以内联进行此操作。
现在要解决坏问题:您需要处理json之外包含{}字符的文件。在这种情况下,当您尝试加载json时,此脚本将引发错误。