首页 > 编程问答 >比较两个超过 200 行的文件失败

比较两个超过 200 行的文件失败

时间:2024-07-25 06:18:23浏览次数:12  
标签:python text compare difflib

我正在比较两个文本文件,但在某些情况下返回的结果是错误的,我已经验证当文件超过 200 行且仅在某些情况下会发生这种情况。

在比较中我只从 file2 中得到肯定的结果.

输入

这是我比较的两个文本文件。 我与 Google 驱动器链接共享它们,因为它们很长:

  1. file1
  2. file2

输出

它返回的是:

different

EL BOSQUE ENCANTADO,El Bosque Encantado,"PRECIO
12,00�"

何时应该返回:

different

CIBELES DE CINE,Galer�a de Cristal de CentroCentro,"PRECIO
7,00�"

通过测试我看到了如果我从文件末尾删除一个介绍并将其保留在 200 行,它会做得很好,但如果我超过 200 行,它就会出错。

代码

# BOOKSTORES
import difflib
import sys

# WE LOOK FOR THE DIFFERENCES AND PRINT THEM.
with open('file1.txt', encoding='utf8') as file_1, open('file2.txt', encoding='utf8') as file_2:
    diff = difflib.Differ()
    result = diff.compare(file_1.readlines(), file_2.readlines())
    result = [line for line in result if line.startswith(("+ "))]

    print(''.join(result))

sys.exit(1)

我做错了什么?可以用另一种方式来使其正确吗?


你的代码中出现错误的原因是,你正在使用 difflib.Differ ,它被设计用来逐行比较,而不是寻找文件之间的集合差异。在你的情况下,你似乎并不关心行的顺序,而是关心哪些行是唯一的。

让我们用一个更适合此任务的方法来重写你的代码:

import sys

# 从两个文件中读取行,去除前导/尾随空格并将其存储在集合中
with open('file1.txt', encoding='utf8') as file_1, open('file2.txt', encoding='utf8') as file_2:
    lines_1 = {line.strip() for line in file_1}
    lines_2 = {line.strip() for line in file_2}

# 查找 file2 中存在但 file1 中不存在的行
different_lines = lines_2 - lines_1

if different_lines:
    print('different')
    for line in different_lines:
        print(line)
    sys.exit(1)
else:
    print('identical')
    sys.exit(0)

这段代码执行以下操作:

  1. 逐行读取文件: 它从两个文件中读取行。
  2. 创建集合: 它为每个文件创建一个集合,它将存储文件中唯一的行(使用 set 自动删除重复项)。 .strip() 方法用于在添加到集合之前删除每行中的前导和尾随空格,以确保一致的比较。
  3. 查找差异: 它查找 file2 中存在但 file1 中不存在的行。
  4. 打印结果: 它打印不同的行或指示文件是否相同。

此方法更有效,因为它利用了集合操作,这通常比逐行比较快,尤其是对于大型文件。它还解决了由于行顺序无关紧要而可能导致你的原始代码出现的问题。

标签:python,text,compare,difflib
From: 78790592

相关文章

  • 使用 python Flask 发送邮件中的图像
    我想发送一封包含html代码和图像的电子邮件但在gmail中它说图像已附加,我不想要这样,我只想要电子邮件正文中的图像。html_content=f"<imgsrc="cid:banner"alt=""style="width:80%;">"msg=MIMEMultipart('related')html_part=MIMEText(html_c......
  • 在 python requests modul 中,如何检查页面是否使用“POST”方法或“GET”方法
    如何使用python“requests”模块检查页面是否使用“GET”方法或“POST”方法。我期望输出为True或False,或者GET或Post预期代码:importrequestsurl=f"www.get_example.com"response=requests.get(url)ifresponse.check_get==True:print("get")你......
  • VS Code Python - 如果括号(括号、大括号等)未关闭,内联建议不起作用
    我遇到的问题是,当我在未闭合的括号或方括号“内部”开始变量名称时,VSCode将不会显示任何建议。但是,如果在键入变量名称之前闭合括号,则建议效果很好。如果我可以避免它,我宁愿不将自动完成括号关闭设置为True也不使用TabOut扩展。第一个屏幕截图显示建议在闭括号/方......
  • 在 Azure 上部署代码时使用 Python 的多处理模块是否有意义?
    我们的团队在Azure机器学习(AML)上部署了一个Python脚本来处理存储在Azure存储帐户上的文件。我们的管道由一个ForEach活动组成,该活动调用每个或列出的文件的Python脚本。从Azure数据工厂(ADF)运行它会触发多个单独的管道同时运行......
  • 我已成功安装 pypdf2 但无法将其导入到我的 python 文件中
    我已经成功安装了pypdf2模块,但在导入它时,我发现该模块丢失了。我尝试使用fromPyPDF2importPdfReader导入,但它不起作用此问题的各种解决方案是什么?在尝试导入PyPDF2时遇到问题。以下是可能导致此问题的一些常见原因和解决方案:安......
  • Python3打开图片时请求ConnectionResetError(10054)
    我试图从'http://xxx.jpg'之类的网站下载图片。代码:headers={'user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/66.0.3359.139Safari/537.36'}url='http://xxx.jpg'resp......
  • Jupyter Notebook 环境中的 Python 版本不匹配
    我遇到Jupyter笔记本启动横幅中报告的Python版本与我在笔记本中查询python--version时显示的版本之间的差异。启动横幅指示Python3.11.9,但是当我运行!python--version时,它返回Python3.11.7。我所做的步骤:basecondahas3.11.7versio......
  • Python XML 解析:字符串中的“<”被阻塞
    我有一个使用ET.XMLParser来解析CppCheckXML报告文件的Python模块。当尝试解析字符串中包含“<”的XML元素中的属性之一时,它会令人窒息,它会将其解释为格式错误的XML,例如:<errormsg="Includefile<iostream>notfound.">(注意字符和“iostream”之间的空格必须放......
  • 任意几行代码要成为Python中的函数需要什么?
    我正在上一门计算机科学课,我的任务是创建一个程序来实现一个带有参数的函数。我的老师告诉我,下面的代码不是一个函数,这让我很困惑,对于将某些代码行归类为“函数”所需的条件,我感到很困惑。defgame(numbers,max_turns,pfl,tgl):turns=0flag=Falseprint("You......
  • 如何使用 Python 创建新的 Azure 订阅?
    我正在尝试使用PythonSDK以编程方式创建新的Azure订阅。我发现的对AzurePythonSDK的唯一引用是这个这是我最终得到的结果:importazure.mgmt.billingimportazure.mgmt.subscriptioncreds=AzureCliCredential()client_name='test'defcreat......