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