Python 比较两个文件并从第二个文件中删除单词

Python 比较两个文件并从第二个文件中删除单词,python,compare,difference,write,Python,Compare,Difference,Write,我对Python非常陌生,我尝试比较两个文件,并使用一个函数获得差异。第一个文件包含英语单词,一个接一个(engwrds.txt),第二个文件是一个web刮取文本的文本文件(ws.txt)。我想要实现的是比较这两个文件并从ws.txt中删除单词,然后将其写入另一个文件。在网上的文件中有单词和句子。但在另一个文件中,这些词被一个接一个地放置 我尝试了下面的代码,但它创建了一个空白的输出文件 with open('ws.txt', 'r', encoding='utf-8') as file1:

我对Python非常陌生,我尝试比较两个文件,并使用一个函数获得差异。第一个文件包含英语单词,一个接一个(engwrds.txt),第二个文件是一个web刮取文本的文本文件(ws.txt)。我想要实现的是比较这两个文件并从ws.txt中删除单词,然后将其写入另一个文件。在网上的文件中有单词和句子。但在另一个文件中,这些词被一个接一个地放置

我尝试了下面的代码,但它创建了一个空白的输出文件

with open('ws.txt', 'r', encoding='utf-8') as file1:
    with open('engwrds.txt', 'r', encoding='utf-8') as file2:
        same = set(file1).intersection(file2)

same.discard('\n')

with open('output_file.txt', 'w', encoding='utf-8') as file_out:
    for line in same:
        file_out.write(line)
然后我尝试了这个,它根本不打印任何输出

from pathlib import Path

with open('engwrds.txt', 'r', encoding='utf-8') as fin:
    exclude = set(line.rstrip() for line in fin)

with fileinput.input('ws.txt', inplace=True) as f:
    for line in f:
        if not exclude.intersection(Path(line.rstrip()).parts):
            print(line, end='')
即使下面的代码也不会打印任何输出

with open('op11-Copy1.txt', 'r') as file1:
    with open('commonwords.txt', 'r') as file2:
        dif = set(file1).difference(file2)
        
dif.discard('\n')
        
with open('diff.txt', 'w') as file_out:
    for line in dif:
        file_out.write(line)
你能解释一下我在这里犯的错误吗?我引用了多个例子,比如。但我不明白这个问题。理想情况下,我想提出一个函数来完成这项任务。感谢您的帮助!事先非常感谢

编辑:这是ws.txt文件的外观。 这就是engwrds.txt的样子。
输出文件如下所示。

只需在不同变量中打开文件并进行比较。 例如:

假设文件ws.txt(刮取文件)包含:

你的世界是美丽的

文件engwrds.txt包含以下文字(一个接一个):

当世界需要野性时

在不同的变量中打开每个变量:

with open('engwrds.txt', 'r', encoding='utf-8') as file:
    engwrds = file.read()

with open('ws.txt', 'r', encoding='utf-8') as file:
    ws = file.read()
在这里,engwrdsws字符串,因此您可以通过许多不同的方式对它们进行比较:

differences = set(engwrds.split()).symmetric_difference(set(ws.split()))
print(differences)

Output: {'beautiful', 'is', 'want', 'while', 'wild', 'your'}

显然,这种比较只有在单词之间用空格隔开时才有效,但是从这里你将更好地了解如何解决这个问题。

只需打开不同变量中的文件并进行比较。 例如:

假设文件ws.txt(刮取文件)包含:

你的世界是美丽的

文件engwrds.txt包含以下文字(一个接一个):

当世界需要野性时

在不同的变量中打开每个变量:

with open('engwrds.txt', 'r', encoding='utf-8') as file:
    engwrds = file.read()

with open('ws.txt', 'r', encoding='utf-8') as file:
    ws = file.read()
在这里,engwrdsws字符串,因此您可以通过许多不同的方式对它们进行比较:

differences = set(engwrds.split()).symmetric_difference(set(ws.split()))
print(differences)

Output: {'beautiful', 'is', 'want', 'while', 'wild', 'your'}

显然,这种比较只有在单词之间用空格隔开时才有效,但是从这里你会更好地了解如何解决这个问题。

我建议你仔细看看这个答案


想添加此作为评论,但我无法添加。

我建议您仔细阅读此答案


想将此作为评论添加,但我无法添加。

谢谢您的支持。然后我把它转换成一个函数,但它不逐行打印。有什么想法吗?下面是函数>>def compare_files(f1,f2):将open(f1,'r',encoding='utf-8')作为f1:f1_words=f1.read(),将open(f2,'r',encoding='utf-8')作为f2:f2_words=f2.read()结果t1=set(f1_words.split())。将对称_差异(set(f2_words.split())作为open('op26.txt','w',encoding='utf-8')作为file:file.write(f'{result1}\n\n')我的想法不会逐行找出差异,它只是比较两个文件,而不考虑行的顺序。因此,如果需要逐行比较,可以解决f1_words.split()和f2_words.split()的问题,并用f1_words.split替换它们。split(“\n”)和f2_words.split(“\n”)。每一个都会给你一个列表,列表中的每个元素都是文本文件的一行。从这里,你可以逐行比较,但问题的其余部分都是你的(因为我们没有你的数据)。当然。我添加了输入/输出文件的外观。我想要这个文件的输出(op26.txt)也可以逐行打印。谢谢。然后我将其转换为一个函数,但它不会逐行打印。有什么想法吗?下面是函数>>def compare_files(f1,f2):将open(f1,'r',encoding='utf-8')作为f1:f1_words=f1。read()将open(f2,'r',encoding='utf-8')作为f2:f2_words=f2.readresult1=set(f1_words.split()).symmetric_difference(set(f2_words.split())与open('op26.txt','w',encoding='utf-8')作为文件:file.write(f'{result1}\n\n')我的想法不会逐行找出差异,它只是比较两个文件,而不考虑行的顺序。因此,如果需要逐行比较,可以解决f1_words.split()和f2_words.split()的问题,并将它们替换为f1_words.split(“\n”)和f2_words.split(“\n”)。其中每一个都会给您一个列表,其中列表的每个元素都是文本文件的一行。从这里,您可以逐行比较,但问题的其余部分都是您的(因为我们没有您的数据)。当然。我添加了输入/输出文件的外观。我希望此文件(op26.txt)的输出也可以逐行打印。