在csv文件中创建特定行的字典

时间:2019-02-20 18:00:35

标签: python dictionary key

假设我的文件采用这种方式:

['720',
'717',
'"Diagnostic"',
'487',
'"{""status"": ""active""',
'""division_type"": ""Organisation""}"']

我需要选择 487 作为新词典中的键,并选择487之后的单词。基本上是新词典中的词典。我已经尝试了以下代码:

for row in line:
    key = row[3]
    if key in d:
         pass
    d[key]=row[21:]
print(d)

我选择3是因为487是第3个索引,而我选择21是因为在csv文件中,以下行位于第21行。

我是编程的新手。请帮帮我。 消息中的错误是:索引超出范围

1 个答案:

答案 0 :(得分:1)

我想说,没有更多数据,以下方法或多或少是实验性的,但可能是一个很好的起点。您可以查找有问题的键(在您的情况下为487)并查找连续的花括号:

import re
from ast import literal_eval

file = """
['720',
'717',
'"Diagnostic"',
'487',
'"{""status"": ""active""',
'""division_type"": ""Organisation""}"']"""

rx = re.compile(r'(?P<key>487)[^{}]+(?P<content>\{[^{}]+\})')

for m in rx.finditer(file):
    content = re.sub(r"""'?"+'?""", '"', m.group('content'))
    d = {m.group('key'): literal_eval(content)}
    print(d)

这产生

{'487': {'status': 'active', 'division_type': 'Organisation'}}

或更笼统地说,是一个功能:

def make_dict(string, key):
    rx = re.compile(r'(?P<key>' + key + ')[^{}]+(?P<content>\{[^{}]+\})')

    for m in rx.finditer(string):
        content = re.sub(r"""'?"+'?""", '"', m.group('content'))
        yield {m.group('key'): literal_eval(content)}

for d in make_dict(file, '487'):
    print(d)

通常,修复文件的输入格式!