Разделение строки по нескольким ключевым словам и создание слова - PullRequest
1 голос
/ 14 февраля 2020

После некоторого просмотра веб-страниц я наконец-то смог получить строку из тела шрифта, и она выглядит следующим образом

string = Date:  02/13/2020  Court Time:  1030  Court Room:  0206  Microfilm:  SD000000000

Последнее, что мне нужно выяснить в моем коде, и я думаю, на данный момент это кажется довольно тривиальным, было бы разбить эту строку на словарные пары, где спаривание выглядело бы так: 1009 * Использование этих ключевых слов в качестве разделителей. но это выплюнуло несколько раз

['Date:', '02/13/2020', 'Court', 'Time:', '1030', 'Court', 'Room:', '0206', 'Microfilm:', 'SD000000000']
['Date:', '02/13/2020', 'Court', 'Time:', '1030', 'Court', 'Room:', '0206', 'Microfilm:', 'SD000000000']
['Date:', '02/13/2020', 'Court', 'Time:', '1030', 'Court', 'Room:', '0206', 'Microfilm:', 'SD000000000']
['Date:', '02/13/2020', 'Court', 'Time:', '1030', 'Court', 'Room:', '0206', 'Microfilm:', 'SD000000000']

Ответы [ 3 ]

3 голосов
/ 14 февраля 2020

В соответствии с вашим примером:

s='Date:  02/13/2020  Court Time:  1030  Court Room:  0206  Microfilm:  SD000000000'

Предполагая, что вашим разделителем является двойной пробел:

sep = '  '
lst = s.split(sep)
d = dict(zip(lst[0::2], lst[1::2]))

Вывод:

 {'Date:': '02/13/2020',
  'Court Time:': '1030',
  'Court Room:': '0206',
  'Microfilm:': 'SD000000000'}
1 голос
/ 14 февраля 2020

Я бы использовал регулярные выражения и построил шаблон для списка ключевых слов:

pattern = '|'.join(['(' + i + ')' for i in keywords])

это дает '(Date:)|(Court Time:)|(Court Room:)|(Microfilm:)'

Теперь мы можем разбить строку с этим шаблоном:

lst = re.split(pattern, string)

, который получает здесь: ['', 'Date:', None, None, None, ' 02/13/2020 ', None, 'Court Time:', None, None, ' 1030 ', None, None, 'Court Room:', None, ' 0206 ', None, None, None, 'Microfilm:', ' SD000000000']

Давайте опубликуем список для извлечения ключей и значений для окончательного диктанта:

def getkey(ls):
    for i in ls:
        if i is not None:
            return i.strip().rstrip(':')

lk = len(keywords)
elts = [(lst[i: i+lk)], lst[i+lk]) for i in range(1, len(lst), lk+1)]
resul = {getkey(i): j.strip() for i,j in elts}

Это дает ожидаемый результат для результата:

{'Date': '02/13/2020', 'Court Time': '1030', 'Court Room': '0206', 'Microfilm': 'SD000000000'}
1 голос
/ 14 февраля 2020

Следующий фрагмент кода сделает свое дело.

my_string = "Date:  02/13/2020, Court Time:  1030, Court Room:  0206,  Microfilm:  SD000000000"
key_value_pair = [line.split(':') for line in my_string.split(',')]
output_dict = {k.strip(): v.strip() for k, v in key_value_pair}
print(output_dict)

Вывод:

{'Date': '02/13/2020', 'Court Time': '1030', 'Court Room': '0206', 'Microfilm': 'SD000000000'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...