逐行删除文本文件中的重复项

时间:2017-03-08 23:36:11

标签: python text duplicates line-by-line

我正在尝试编写一个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:编辑示例以反映在第一个值实例后,重复值可能并不总是直接跟随。

2 个答案:

答案 0 :(得分:1)

@ Prune的回答给出了这个想法,但它需要像这样修改:

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

答案 1 :(得分: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替换重复项。