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

时间:2019-02-14 22:06:49

标签: printing formatting line

file2包含大量数字。 File1有一小部分数字。 file2是file1中某些数字的副本。我想从文件1中删除文件2中的重复编号,而不从文件2中删除任何数据,但同时不删除文件1中的行号。我使用PyCharm IDE,并分配行号。此代码不会从文件1中删除重复数据,也不会从文件2中删除数据。这就是我想要的,但是它正在删除重复的数字和行,并在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

文件1结尾:
  54545
  23232
  78787

我想要的。

file-1开始:
  54545
34344
23232
78787

文件1结尾:
  54545

23232
78787

1 个答案:

答案 0 :(得分: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

关于效率的小笔记

正如您所说,这段代码实际上是在重写所有行,包括已编辑的行和未重写的行。删除和重写文件中间的几行并不容易,而且无论如何我都不知道它会更有效,因为您不知道一个先验哪行编辑:您将始终需要逐行读取和处理整个文件,以了解应编辑的行。据我所知,您几乎找不到比该解决方案更有效的解决方案。很高兴被拒绝,如果有人知道怎么做。