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的先验进行编辑:您将始终需要按行读取和处理完整的文件,以了解应该编辑哪些行。据我所知,您几乎不会发现解决方案比这更有效。很高兴被拒绝,如果有人知道如何。