我正在尝试比较Python中的两个文件,它们都包含一些单词。我希望代码在 file1 中查找 file2 中的单词,并将从 file1 中找不到的单词作为输出放入新文件中。
下面的代码是我尝试过的,但它没有做任何事情。它甚至没有显示错误,所以我不知道出了什么问题或应该有所不同。
file1 = open('C:/Users/Atal/Desktop/School/Project datas/file1.txt')
file2 = open('C:/Users/Atal/Desktop/School/Project datas/file2.txt')
fileContent = file1.read();
fileContent2 = file2.read();
loglist = file1.readlines()
loglist2 = file2.readlines()
file2.close()
line = file1.readline()
file1.close()
found = False
for line in loglist:
if line in loglist2 :
found = True
if not found:
file1 = open('C:/Users/Atal/Desktop/School/Project datas/file1.txt', 'w')
file1.write(line +"n")
file1.close()
文件1如下所示: 彼得 一月 理查
File2 如下所示: 弗洛伊德 理查 鲍勃
新文件应如下所示: 彼得 一月
如果有任何方法可以做到这一点,请告诉我。提前谢谢。
使用 set 而不是这样:
list_1 = ['Peter', 'Jan', 'Richard']
list_2 = ['Floyd', 'Richard', 'Bob']
set_2 = set(list_2)
main_list = [item for item in list_1 if item not in set_2]
main_list
输出:
['Peter', 'Jan']
在编写代码时,您需要准确记住您希望每个变量在程序执行的每一步包含的内容。例如,这个:
loglist = file1.readlines()
...
line = file1.readline()
...
for line in loglist:
如果你只是要立即覆盖line
,为什么要做中间的陈述?在您的for
循环中:
for line in loglist:
if line in loglist2:
found = True
if not found:
# save new file
因此,如果在loglist2
中找到loglist
中的一行,则将变量found
设置为True
。如果这没有发生(如果found
保持False
),则输出到 file1。请注意,您没有对line
做任何其他事情,即使您是,该行也file1.write(line +"n")
只输出一行,并且永远不会与其他行重复(或者我从您在问题中缩进代码的方式推测)。
因此,这是您如何更正确地执行此操作。在阅读本文时,请注意每个变量在使用时的类型(字符串、列表等):
with open(".../file1.txt", "r") as file1, open(".../file2.txt", "r") as file2:
logList1 = file1.readlines()
logList2 = file2.readlines()
# the with block will close the files automatically
for line in logList1:
if line in logList2:
logList2.remove(line) # if the line from file1 is found in file2, remove that line from file2
with open(".../file3.txt", "w") as file3:
file3.writelines(logList2) # write the contents of file2, after we removed lines from file1 from it
@johnny1995,在他的回答中,做了列表理解的中间步骤:
logList3 = [line for line in logList2 if line not in logList1]
这基本上是我上面所做的简写:"创建一个包含logList2
中每一行的新列表,但前提是该行没有出现在logList1
中"。