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

'\ r \ nКонтакт импортирован: \ r \ nBusinessPhone: 9547711900 Line1: 2440
East Commercial Blvd. \ r \ n Город: Ft. Лодердейл \ r \ n Штат: Флорида \ r \ n Почтовый индекс: 33308 \ r \ n \ r \ nArt Womack рекомендует Steve Paul Dentist на Коммерческий бульвар область. \ r \ nA_womack@me.com> \ r \ nБонд? Короны? Шпон? \ 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
Luiz_F 24 Дек 2018 в 08:48

2 ответа

Лучший ответ

Как вы пытаетесь очистить данные? Образцы данных, которые у вас есть, можно разбить, используя в качестве разделителя '\ 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())
0
Rishabh Mishra 24 Дек 2018 в 07:19

Можешь попробовать:

>>> 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)
1
Karn Kumar 24 Дек 2018 в 06:44