Py学习  »  Python

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

Ken • 6 年前 • 1953 次点击  

我有一个.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() )

我认为这是没有效率的,希望你能回答。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47332
文章 [ 1 ]  |  最新文章 6 年前
vash_the_stampede
Reply   •   1 楼
vash_the_stampede    7 年前

你可以用 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