有没有一种方法可以在另一个文件中从一个文件中查找单词,并将另一个文件中找不到的单词输出到一个新文件中?

2024-09-28 23:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图比较Python中的两个文件,它们都包含一些单词。我希望代码在file2中查找file1中的单词,并将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如下所示: 彼得 简 理查德

文件2如下所示: 弗洛伊德 理查德 鲍勃

新文件应如下所示: 彼得 一月

如果有什么办法,请告诉我。提前谢谢


Tags: 文件txtprojectcloselineopen单词users
2条回答

使用set和not in like so:

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

@johny1995,在他的回答中,做了列表理解的中间一步:

logList3 = [line for line in logList2 if line not in logList1]

这基本上是我上面所做工作的简写:“创建一个包含logList2中每一行的新列表,但前提是该行没有出现在logList1

相关问题 更多 >