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