在文件中删除行比较时,无需删除行号或注入新的空白行



file2具有很大的数字列表。File1的数字列表很小。File2是File1中的某些数字的重复。我想从file2中删除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

file-1开始:
54545
34344
23232
78787

file-1结束:
54545
23232
78787

我想要的。

file-1开始:
54545
34344
23232
78787

file-1结束:
54545

23232
78787

当您找到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

效率的小注释

正如您所说,此代码实际上正在重写所有线条,所编辑的行,而没有编辑。删除和重写文件中间的几行并不容易,无论如何,我不确定它在您的情况下是否会更有效,因为您不知道 a的先验进行编辑:您将始终需要按行读取和处理完整的文件,以了解应该编辑哪些行。据我所知,您几乎不会发现解决方案比这更有效。很高兴被拒绝,如果有人知道如何。

最新更新