0

我正在尝试编写一个 Python 脚本来删除文本文件中的重复字符串。但是,重复数据删除应该只发生在每一行内。

例如,文本文件可能包含:

þ;ABC.001.123.1234;þ;;þ;10 ABC\ABCD\ABCDE; 10 ABC\ABCD\ABCDE
þ;ABC.001.123.1234;þ;;þ;10 ABC\ABCD\ABCDE;12 EFG\EFG; 12 EFG\EFG ;þ þ;ABC.001.123.1234;þ;;þ;10 ABC\ABCD\ABCDE;12 EFG\EFG;09 XYZ\XYZ\XYZ; 12 EFG\EFG

因此,在上面的示例中,脚本应该只删除粗体字符串。

我搜索了 Stack Overflow 和其他地方以尝试找到解决方案,但运气不佳。似乎有很多解决方案可以删除重复的行,但我正在尝试逐行删除一行中的重复项。

更新:只是为了澄清 -þ是每个字段的分隔符,并且;是每个字段中每个项目的分隔符。在每一行中,我试图删除分号之间包含的任何重复字符串。

更新 2:编辑示例以反映重复值可能并不总是紧跟在值的第一个实例之后。

4

2 回答 2

1

@Prune's answer给出了这个想法,但需要像这样修改:

input_file = """"þ;ABC.001.123.1234;þ;;þ;10 ABC\ABCD\ABCDE;10 ABC\ABCD\ABCDE;þ
þ;ABC.001.123.1234;þ;;þ;10 ABC\ABCD\ABCDE;12 EFG\EFG;12 EFG\EFG;þ"""""

input = input_file.split("\n")

for line in input:
    seen_item = []
    for item in line.split(";"):
        if item not in seen_item or item == "þ":
             seen_item.append(item)
    print(";".join(seen_item))
于 2017-03-09T01:33:18.720 回答
0
import re
with open('file', 'r') as f:
     file = f.readlines()
for line in file:
     print(re.sub(r'([^;]+;)(\1)', r'\1', line))

逐行读取文件;然后使用 re.sub 替换重复项。

于 2017-03-09T01:50:28.203 回答