在文件比较期间删除行而不删除行号或注入新的空行

问题描述 投票:0回答:1

file2有一个很大的数字列表。 File1有一个小数字列表。 file2是file1中某些数字的副本。我想从file1中删除file2中的重复数字,而不删除file2中的任何数据,但同时不删除file1中的行号。我使用PyCharm IDE并分配行号。此代码确实从file1中删除了重复数据,并且不会从file2中删除数据。这是我想要的,但它删除了重复的数字和行,并在file1中重写它们,这是我不想做的。

import fileinput

# small file2
with open('file2.txt') as fin:
    exclude = set(line.rstrip() for line in fin)
# big file1
    for line in fileinput.input('file1.txt', inplace=True):
        if line.rstrip() not in exclude:
            print(line)

示例:正在发生的事情,file2 34344

文件-1在开始时: 54545 34344 23232 78787

file-1结束: 54545 23232 78787

我想要的是。

file-1开始: 54545 34344 23232 78787

file-1结束: 54545

23232 78787

printing formatting line
1个回答
0
投票

当您找到exclude集中的数据时,您只需要打印一个空行。

import fileinput

# small file2
with open('file2.txt') as fin:
    exclude = set(line.rstrip() for line in fin)
# big file1
    for line in fileinput.input('file1.txt', inplace=True):
        if line.rstrip() not in exclude:
            print(line, end='')
        else:
            print('')    

如果file1.txt是:

54545 1313 23232 13551

而file2.txt是:

1313 13551

在file1.txt变为之前运行脚本之后:

54545

23232

Small note on efficiency

正如你所说,这段代码实际上是重写了所有的行,编辑的那些和那些没有的行。删除并重写文件中间只有几行是不容易的,无论如何我不确定它在你的情况下会更有效,因为你不知道应该编辑哪些行:你将永远需要逐行读取和处理整个文件,以了解应编辑哪些行。据我所知,你很难找到比这个更有效的解决方案。如果有人知道如何,很高兴被拒绝。

© www.soinside.com 2019 - 2024. All rights reserved.