Как читать многострочные значения в диктонар - PullRequest
0 голосов
/ 21 октября 2019

У меня есть файл1 в формате

field1-name, initial-val, desc
field2-name, initial-val, desc
field2-name, initial-val, desc
end-group1

field1-name, inital-val, desc
end-group2

.....

Мне нужно создать словарь групп с группой в качестве ключа и список полей в качестве значения

group1: [(field1-name, initial-val, desc), (field2-name, inital-val, desc),(...)]
group2: [(field1-name, initial-val, desc)]

Какой самый Pythonic способ прочитать этот файл и преобразовать его в группы. У меня есть код, который читает построчно и анализирует / сохраняет значение, но мне было интересно, если есть лучший способ.

psedo-code
group = {}
with open(file, 'r') as f:
   for line in f:
      if line.startswith(r/end/):
          #extract group-name and create a tuple for field values
          group[group-name] = new_group
          new_group = []
          continue
      new_group.append(line)

1 Ответ

1 голос
/ 21 октября 2019

Чтение файла построчно является наиболее подходящим решением, учитывая, что ваш формат файла является смешанным и требует условного оператора, чтобы определить, добавлять ли его в подсписок или создавать новую запись в файле dict:

group = {}
rows = []
with open(file, 'r') as f:
    for line in f:
        line = line.rstrip()
        if line.startswith('end-'):
            group[line.replace('end-', '', 1)] = rows
            rows = []
        elif line:
            rows.append(tuple(line.split(', ')))

group становится:

{'group1': [('field1-name', 'initial-val', 'desc'),
            ('field2-name', 'initial-val', 'desc'),
            ('field2-name', 'initial-val', 'desc')],
 'group2': [('field1-name', 'inital-val', 'desc')]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...