Python:在每个元素中分割一个保留相关信息的字符串

2024-09-28 21:32:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从客户的数字笔记本中提取联系人信息,该笔记本的条目如下:

'\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'

拆分之后,我的目标是得到一个包含相关数据的元素列表(中间大部分包含“:”),以便稍后将其转换为python字典。你知道吗

我已经尝试过用'\r'和'\r'字符来分解字符串,但是一直缺少第1行:yadayada信息。你知道吗

我想要的是:

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

Tags: 信息city客户笔记本数字statecommercialft
2条回答

您可以尝试:

>>> 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转换为list:

# 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)

你是如何清理数据的?可以使用'\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())

相关问题 更多 >