Python - 合并两个重叠的字符串

标签 python

我正在尝试创建一个完整的地址,但我的数据以以下形式出现:

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/

相关文章:

python - 为什么我每天早上在 CI 上都会收到 python 异常 "OperationFailure: local.oplog.rs missing. did you drop it? if so restart server"?

python - 在python中使用plotineine将pdf与直方图一起绘制

python - 在flask html页面中访问json数据

python使用lxml解析html表

python - Python for循环中的多个循环控制变量

python - 如何测试 python 发行版是否具有 unicode 属性

python - 如何在迭代列表末尾的连续切片时获取 Python 列表的最后一个切片

python - 每次使用 scikit 运行线性回归时都会得到不同的结果

Python Pandas : How the the last of rows timely close together within groups?

python - reshape 数据框,使列标题变成行