我输入的数据文件为
obama president "[{""b"":0,""e"":6,""v"":""obama""}]"
beatles band "[{""b"":0,""e"":8,""v"":""beatles""}]"
我想从内部字典中提取一个值为“ v”的输出文件,
obama president /t obama;
beatles band /t beatles;
我当时使用代码剥离项目并进入字典,但是由于键的开头和结尾都有两个双引号“”,所以我遇到了错误。
import json
with open("NER_data_0_out","wt") as o, open('NER_data_0') as f:
for line in f:
l = line.strip().split("\t")
h = l[1].strip('"')[1:-1]
print(h)
d = json.loads(h)
print(d)
,我得到了错误。我想我需要删除一些引号吗?
Expecting ':' delimiter: line 1 column 4 (char 3)
答案 0 :(得分:0)
错误消息抱怨输入无效的JSON。除了双引号外,数组{
中的对象也有一个[]
开头,但是没有正确关闭。
您可以使用RegEx,而不是使用JSON解决方法。
此正则表达式将查找以下序列""v"":""TEXT_HERE""
。
\"\"v\"\"\:\"\"(.+)\"\"
这里是一个例子。
import json
import re
with open("input") as f:
for line in f:
m = re.findall(r"\"\"v\"\"\:\"\"(.+)\"\"", line)
print(m[0])
您可以试用此正则表达式,并在https://regex101.com/r/iy2pHc/1处了解其工作原理。
答案 1 :(得分:0)
这将完成工作:
import re
with open("FILE_TO_READ","r") as f:
for line in f:
v = re.findall('"([^"]*)"', line)[-2]
line = line.split('"', 1)[0]
print(f'{line} /t {v}')