删除重复项目的第一个实例,并将其他实例保留在Python中的.txt文件中

时间:2018-10-23 08:49:49

标签: python

我有一个.txt文件,其中包含许多重复的行,并且我想替换第一行并保留其他行。谁能帮我吗?

原始的test.txt内容

222
111
111
111
111

我想要的文件

222
111
111
111

我尝试过这种方法

  

Search and replace a line in a file in Python

但是此方法将替换所有重复的行。

无论如何,我得到了答案。真的很简单。

flag = 1
for line in fileinput.input(filename, inplace = 1): 
    if "111" in line and flag==1:
        print(line.replace("111",  "22222").rstrip() )
        flag = 2
    else:
        print(line.replace("111",  "111").rstrip() )

我认为这样效率不高,希望您能回答。

1 个答案:

答案 0 :(得分:0)

您可以使用collections.defaultdict并创建一个包含文档中每个值的所有索引的字典。如果索引不止一个,则可以通过对字典值进行切片并将它们附加到新列表中来仅写入在第一项之后的值。

from collections import defaultdict

with open('test.txt') as f:
    content = (f.read()).split()

dd = defaultdict(list)

for i, v in enumerate(content):
    dd[v].append(i)

res = []

for v in dd.values():
    if len(v) == 1:
        res.append(content[v[0]])
    else:
        for i in v[1:]:
            res.append(content[i])

with open('out.txt', 'w') as f:
    f.write('\n'.join(map(str,res)))
222
111
111
111