Создание словаря определенной строки в CSV-файле - PullRequest
0 голосов
/ 20 февраля 2019

Предположим, мой файл выглядит примерно так:

['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 является третьим индексом, и я выбрал 21, потому что в файле csv следующая строка находится в строке номер 21.

Я новичок в программировании.Пожалуйста, помогите мне.Ошибка в сообщении: индекс выходит за пределы диапазона

1 Ответ

0 голосов
/ 20 февраля 2019

Я бы сказал, что без дополнительных данных следующий подход более или менее экспериментален, но может быть хорошей отправной точкойВы можете найти нужный ключ (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)

В общем, исправьте формат ввода файла!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...