我正在尝试创建一个完整的地址,但我的数据以以下形式出现:
Line 1 | Line 2 | Postcode
1, First Street, City, X13
1, First Street First Street, City X13
1 1, First Street, City, X13 X13
关于如何创建此数据还有一些其他排列,但我希望能够将所有这些合并到一个没有重叠的字符串中。所以我想创建字符串:
1,城市第一街,X13
但不是 1, First Street, First Street, City, X13
等
如何在不复制已有数据的情况下连接或合并这些数据?还有一些单元格,例如顶行,其中没有超过第一个单元格的信息。
最佳答案
如果您有纯文本,您可以使用 \n
拆分文本以获取行并使用 ,
拆分行以获取单独的字段:
>>> s = """1, First Street, City, X13
... 1, First Street First Street, City, X13
... 1 1, First Street, City, X13 X13"""
>>>
>>> lines = s.split('\n')
>>>
>>> splitted_lines = [line.split(',') for line in lines]
请注意,作为一种更符合 Python 的方式,您可以使用 csv
模块通过将逗号 ,
指定为分隔符来读取您的文本。
import csv
with open('file_name') as f:
splitted_lines = csv.reader(f,delimiter=',')
然后您可以使用以下列表理解来获取每列中的唯一字段:
>>> import re
>>> ' '.join([set([set(re.split(r'\s{2,}',i)).pop() for i in column]).pop() for column in zip(*splitted_lines)])
'1 First Street City'
请注意,在这里您可以使用 zip()
函数获取列,然后使用 re.split()
和正则表达式 r'\s 拆分项目{2,}'
用 2 个或更多的空格分割你的字符串,然后你可以起诉 set()
来保留唯一的项目。
注意:如果您关心顺序,可以使用 collections.OrderedDict
而不是 set
>>> from collections import OrderedDict
>>>
>>> d = OrderedDict()
>>> ' '.join([d.fromkeys([set(re.split('\s{2,}',i)).pop() for i in column]).keys()[0] for column in zip(*splitted_lines)])
'1 First Street City X13'
关于Python - 合并两个重叠的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34199228/