Python: разделение строки с сохранением соответствующей информации в каждом элементе - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь извлечь контактную информацию из цифровой записной книжки клиента, в которой есть такие записи:

'\ r \ nContact Imported: \ r \ nBusinessPhone: 9547711900 Строка 1: 2440
Восточный коммерческий бул. Город: Форт.Лодердейл \ r \ n Штат: FL \ r \ n Почтовый индекс: 33308 \ r \ n \ r \ nАрт Вомак рекомендует стоматолога Стива Пола в районе Коммерческого бульвара. \ R \ nA_womack@me.com> \ r \ nBond?Коронки?Veneer? \ R \ n \ r \ n \ r \ n '

Моя цель после разбиения состоит в том, чтобы иметь список элементов, содержащих релевантные данные (в основном, которые содержат «:» в середине), чтобы потом я мог преобразовать его в словарь Python.

Я уже пытался разбить строку на символы '\ r' и '\ r', но я все еще пропускаю информацию Line1: yadayada.

Я хотел что-то вроде:

['BusinessPhone : 9547711900','BusinessPhone : 9547711900',
'Line1 : 2440 East Commercial Blvd.', 'City : Ft. Lauderdale',
 'State : FL', 'PostalCode : 3330']

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Вы можете попробовать:

>>> from io import StringIO
>>> import pandas as pd
>>> data = """
... '\r\nContact Imported:\r\nBusinessPhone : 9547711900 Line1 : 2440
... East Commercial Blvd.\r\n City : Ft. Lauderdale\r\n State : FL\r\n PostalCode : 33308\r\n\r\nArt Womack recommends Steve Paul Dentist on Commercial Blvd area.\r\nA_womack@me.com>\r\nBond? Crowns? Veneer?\r\n\r\n\r\n'
... """

Вы можете попробовать прочитать с помощью pd.read_csv:

>>> df = pd.read_csv(StringIO(data))
>>> df
                                                   '
0                                  Contact Imported:
1            BusinessPhone : 9547711900 Line1 : 2440
2                              East Commercial Blvd.
3                              City : Ft. Lauderdale
4                                         State : FL
5                                 PostalCode : 33308
6  Art Womack recommends Steve Paul Dentist on Co...
7                                   A_womack@me.com>
8                              Bond? Crowns? Veneer?
9                                                  '

В соответствии с предложением @jezrael, при необходимости преобразуйте df в список:

# df.values.tolist()

ИЛИ

>>> df.values
array([['Contact Imported:'],
       ['BusinessPhone : 9547711900 Line1 : 2440'],
       ['East Commercial Blvd.'],
       [' City : Ft. Lauderdale'],
       [' State : FL'],
       [' PostalCode : 33308'],
       ['Art Womack recommends Steve Paul Dentist on Commercial Blvd area.'],
       ['A_womack@me.com>'],
       ['Bond? Crowns? Veneer?'],
       ["'"]], dtype=object)
0 голосов
/ 24 декабря 2018

Как вы пытаетесь очистить данные?Образцы данных, которые у вас есть, могут быть разбиты с помощью '\ r \ n' в качестве разделителя.Вы можете фильтровать список после разделения на основе того, пуста ли строка в списке или нет.Это может быть сделано в качестве основного процесса очистки данных.Часть, которая имеет отношение к вам, вы решаете сами.

Базовый код для очистки может быть:

mystr = '\r\nContact Imported:\r\nBusinessPhone : 9547711900 Line1 : 2440 East Commercial Blvd.\r\n City : Ft. Lauderdale\r\n State : FL\r\n PostalCode : 33308\r\n\r\nArt Womack recommends Steve Paul Dentist on Commercial Blvd area.\r\nA_womack@me.com>\r\nBond? Crowns? Veneer?\r\n\r\n\r\n'
data = mystr.split('\r\n')
data_filtered = list(filter(lambda x: x, data))
for d in data_filtered:
    print(d.strip())

Это выдаст:

Contact Imported:
BusinessPhone : 9547711900 Line1 : 2440 East Commercial Blvd.
City : Ft. Lauderdale
State : FL
PostalCode : 33308
Art Womack recommends Steve Paul Dentist on Commercial Blvd area.
A_womack@me.com>
Bond? Crowns? Veneer?

Вам все еще нужновыяснить, что важно.

Редактировать: На основе данной строки вы можете использовать это:

def convert(x):
    d = x.split(':')
    newlist = []
    if len(d) > 2:
        # Hack will work only in few cases, including this case
        vals = d[1].strip().split(' ')
        newlist.append(f'{d[0]}:{vals[0]}')
        newlist.append(f'{vals[1]}:{d[2]}')
        return newlist

    return [x]


mystr = '\r\nContact Imported:\r\nBusinessPhone : 9547711900 Line1 : 2440 East Commercial Blvd.\r\n City : Ft. Lauderdale\r\n State : FL\r\n PostalCode : 33308\r\n\r\nArt Womack recommends Steve Paul Dentist on Commercial Blvd area.\r\nA_womack@me.com>\r\nBond? Crowns? Veneer?\r\n\r\n\r\n'
data = mystr.split('\r\n')
data_filtered = list(filter(lambda x: x, data))
data_filtered_2 = list((map(lambda x: convert(x), data_filtered)))

data_combined = []
for i in data_filtered_2:
    data_combined += i

for d in data_combined:
    print(d.strip())
...