假设我的文件采用这种方式:
['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行。
我是编程的新手。请帮帮我。 消息中的错误是:索引超出范围
答案 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)
通常,修复文件的输入格式!