Извлечение данных из многострочной строки и сохранение их в словаре Python - PullRequest
0 голосов
/ 11 октября 2019

Извлекаемые данные представлены в специальном формате, в котором заголовки (записанные в верхнем регистре) должны храниться в ключах и text , представленных взаголовок в значениях словаря.

Я прилагаю образец текстового файла, представленного в формате.

image

Ожидаемый результат для следующего примера будет

dict = {"1. PAPER1" : "text under this heading",
        "INTRODUCTION" : "text under this heading",
        "PROBLEM STATEMENT" : "text under this heading",
        .
        .
       }

Я полагаю, что это можно решить с помощью регулярных выражений или условных выражений. Я пытался, но не смог решить.

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Я решил вышеупомянутую проблему таким образом.

with StringIO(txt) as f:   
    key = []
    temp = []
    for line in f:
        if line.strip() != '':
            if line.strip()[0].isupper() and line.strip()[1].isupper() :
                list2= line.split(" ")
                print(list2)
                temp = []
                for i in list2:
                    if i.isupper():
                        temp.append(i)
                key.append(' '.join(temp))

import re
split_str = '|'.join(key[1:])
value = re.split(split_str,txt2)

dictionary = dict(zip(key,value))

'txt' представляет собой многострочную строку, содержащую данные.

перечисляет ключи и значения хранилища 'key' и 'value' для словаря соответственно.

Спасибомного всем за ваши ответы.

0 голосов
/ 11 октября 2019

Настройка:

txt = """
INTRODUCTION 

Blah blah blah

blah? blah blah

2. NEXT SECTION

Blah Blah? Blah blah blah.
"""

Логика:

txt_split = [*filter(lambda _: _!='', txt.split('\n'))]

txt_split_filt = [''.join([*filter(str.isalpha, _)]) for _ in txt_split ]

header_inds = [1 if _.isupper() else 0 for _ in txt_split_filt]

res = {}

this_ind = -1
for idx, header_ind in enumerate(headers):
    if header_ind:
        this_ind = idx
        res[txt_split[this_ind]] = ''
    else:
        res[txt_split[this_ind]] += '\n'
        res[txt_split[this_ind]] += txt_split[idx] 


res

Выход:

{'INTRODUCTION ': '\nBlah blah blah\nblah? blah blah',
 '2. NEXT SECTION': '\nBlah Blah? Blah blah blah.'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...