社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Ken • 5 年前 • 1767 次点击  

我有一个.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
 
1767 次点击  
文章 [ 1 ]  |  最新文章 5 年前
vash_the_stampede
Reply   •   1 楼
vash_the_stampede    6 年前

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