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