从表示为字符串的字典中提取值

时间:2020-08-11 19:37:40

标签: python json

我输入的数据文件为

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)

2 个答案:

答案 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}')