比较两个文件在 python 中报告的差异

2023-12-12

我有 2 个名为“hosts”的文件(位于不同的目录中)

我想使用 python 比较它们,看看它们是否相同。如果它们不相同,我想在屏幕上打印差异。

到目前为止我已经尝试过这个

hosts0 = open(dst1 + "/hosts","r") 
hosts1 = open(dst2 + "/hosts","r")

lines1 = hosts0.readlines()

for i,lines2 in enumerate(hosts1):
    if lines2 != lines1[i]:
        print "line ", i, " in hosts1 is different \n"
        print lines2
    else:
        print "same"

但是当我运行这个时,我得到

File "./audit.py", line 34, in <module>
  if lines2 != lines1[i]:
IndexError: list index out of range

这意味着其中一台主机比另一台拥有更多的线路。 有没有更好的方法来比较两个文件并报告差异?


import difflib

lines1 = '''
dog
cat
bird
buffalo
gophers
hound
horse
'''.strip().splitlines()

lines2 = '''
cat
dog
bird
buffalo
gopher
horse
mouse
'''.strip().splitlines()

# Changes:
# swapped positions of cat and dog
# changed gophers to gopher
# removed hound
# added mouse

for line in difflib.unified_diff(lines1, lines2, fromfile='file1', tofile='file2', lineterm=''):
    print line

输出以下内容:

--- file1
+++ file2
@@ -1,7 +1,7 @@
+cat
 dog
-cat
 bird
 buffalo
-gophers
-hound
+gopher
 horse
+mouse

此差异为您提供了上下文 - 周围的行,以帮助您清楚文件的不同之处。您可以在这里看到“cat”两次,因为它已从“dog”下方删除并添加到其上方。

您可以使用 n=0 来删除上下文。

for line in difflib.unified_diff(lines1, lines2, fromfile='file1', tofile='file2', lineterm='', n=0):
    print line

输出这个:

--- file1
+++ file2
@@ -0,0 +1 @@
+cat
@@ -2 +2,0 @@
-cat
@@ -5,2 +5 @@
-gophers
-hound
+gopher
@@ -7,0 +7 @@
+mouse

但现在它充满了“@@”行,告诉您文件中已更改的位置。让我们删除多余的行以使其更具可读性。

for line in difflib.unified_diff(lines1, lines2, fromfile='file1', tofile='file2', lineterm='', n=0):
    for prefix in ('---', '+++', '@@'):
        if line.startswith(prefix):
            break
    else:
        print line

给我们这个输出:

+cat
-cat
-gophers
-hound
+gopher
+mouse

现在你想让它做什么? 如果您忽略所有删除的行,那么您将不会看到“hound”被删除。 如果您只想显示文件的添加内容,那么您可以这样做:

diff = difflib.unified_diff(lines1, lines2, fromfile='file1', tofile='file2', lineterm='', n=0)
lines = list(diff)[2:]
added = [line[1:] for line in lines if line[0] == '+']
removed = [line[1:] for line in lines if line[0] == '-']

print 'additions:'
for line in added:
    print line
print
print 'additions, ignoring position'
for line in added:
    if line not in removed:
        print line

输出:

additions:
cat
gopher
mouse

additions, ignoring position:
gopher
mouse

现在您可能已经知道有多种方法可以“打印两个文件的差异”,因此如果您需要更多帮助,则需要非常具体。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较两个文件在 python 中报告的差异 的相关文章

  • Python Popen 与 psexec 挂起 - 不良结果

    我对 subprocess Popen 和我认为是管道的问题有疑问 我有以下代码块 从 cli 运行时 100 都不会出现问题 p subprocess Popen psexec serverName get cmd c ver echo
  • Python - 将宽字符字符串从二进制文件转换为 Python unicode 字符串

    这是漫长的一天 我有点困惑 我正在读取一个包含大量宽字符字符串的二进制文件 我想将它们转储为 Python unicode 字符串 为了解压非字符串数据 我使用 struct 模块 但我不知道如何对字符串执行相同的操作 例如 阅读 系列 一
  • FileNotFoundException:/存储/模拟/0/Android

    我尝试这个文件写入器 读取器代码段进行测试 File file new File Environment getExternalStorageDirectory LM lm lisdat 01 txt FileOutputStream ou
  • python 模拟第三方模块

    我正在尝试测试一些处理推文的类 我使用 Sixohsix twitter 来处理 Twitter API 我有一个类充当 Twitter 类的外观 我的想法是模拟实际的 Sixohsix 类 通过随机生成新推文或从数据库检索它们来模拟推文的
  • Django 模型在模板中不可迭代

    我试图迭代模型以获取列表中的第一个图像 但它给了我错误 即模型不可迭代 以下是我的模型和模板的代码 我只需要获取与单个产品相关的列表中的第一个图像 模型 py class Product models Model title models
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • 切片 Dataframe 时出现 KeyError

    我的代码如下所示 d pd read csv Collector Output csv df pd DataFrame data d dfa df copy dfa dfa rename columns OBJECTID Object ID
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • 如何解决使用 Spark 从 S3 重新分区大量数据时从内存中逐出缓存的表分区元数据的问题?

    在尝试从 S3 重新分区数据帧时 我收到一个一般错误 Caused by org apache spark SparkException Job aborted due to stage failure Task 33 in stage 1
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • 默认情况下,Keras 自定义层参数是不可训练的吗?

    我在 Keras 中构建了一个简单的自定义层 并惊讶地发现参数默认情况下未设置为可训练 我可以通过显式设置可训练属性来使其工作 我无法通过查看文档或代码来解释为什么会这样 这是应该的样子还是我做错了什么导致默认情况下参数不可训练 代码 im
  • 迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

    我的例子是这样的 for my key in my dict keys my dict my key mutate 上述代码的行为是否已定义 假设my dict是一本字典并且mutate是一个改变其对象的方法 我担心的是 改变字典中的值可能
  • 当鼠标悬停在上面时,intellisense vscode 不显示参数或文档

    我正在尝试将整个工作流程从 Eclipse 和 Jupyter Notebook 迁移到 VS Code 我安装了 python 扩展 它应该带有 Intellisense 但它只是部分更糟糕 我在输入句点后收到建议 但当将鼠标悬停在其上方
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x
  • 检查字典键是否有空值

    我有以下字典 dict1 city name yass region zipcode phone address tehsil planet mars 我正在尝试创建一个基于 dict1 的新字典 但是 它不会包含带有空字符串的键 它不会包
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default

随机推荐

  • 我可以在 Google 跟踪代码管理器中添加 Facebook 转化跟踪吗?

    我会在 Google 标签管理中添加 Facebook 转化跟踪像素 我看到的唯一问题是 FB 要求在标签之间添加代码 而 GTM 则位于 有点令人困惑 有任何想法吗 FB 转换跟踪代码应介于 and 正确部署Google Tag Mana
  • 如何参数化 Pytest 夹具?

    考虑以下 Pytest import pytest class TimeLine object instances 0 1 2 pytest fixture def timeline return TimeLine def test tim
  • 使用 OpenXML 将 PowerPoint 演示文稿另存为 PDF

    我的目标是建立一个自动化的服务器端流程来转变 ppt into a pdf Microsoft 自己建议我使用 OpenXML 现在我正在考虑这一点 我的问题是 我真的可以使用 OpenXML 实现我的目标吗 我很难找到我期望的方法 例如
  • 优化 pyomo 中的 Fortran 函数

    我希望使用 Pyomo 优化 Fortran 函数 目标函数和约束都是用 Fortran 编写的 根据给出的答案here 我们可以用ExternalFunction表达式对象 但即使是最简单的函数我也无法得到结果 下面给出的是一个可重现的示
  • C 编程中 gets、scanf 和 fgets 之间的区别[重复]

    这个问题在这里已经有答案了 我最近开始学习C编程语言 并在三本不同的书中看到了这三个输入函数 因此 当考虑到效率时 我对使用哪一个有点困惑 因此 当考虑到效率时 我对使用哪一个有点困惑 没有一个 I O 速度慢 如果需要效率 就不要进行 I
  • Firebase Firestore 适用于真实数据库,但不适用于模拟器

    我正在使用 Firebase 并开始尝试使用 Firebase 模拟器运行本地开发实例 我正在运行 Firebase Tools v8 4 1 当我使用真正的 Firestore 数据库运行时 一切正常 然而 当我使用模拟器时 出现了一些问
  • auto_ptr 与 swig

    我正在尝试包装一个使用 auto ptr 的 C 库 我正在使用痛饮 并想要生成 python 绑定 我看过 swig 文档中关于如何将 swig 与智能指针一起使用的部分here 但我无法让它发挥作用 Swig 生成想要使用 const
  • pascal 中使用的集合的实现是什么?

    我想知道语言提供的 pascal 中集合类型的实际实现 特别是 我想知道 freepascal 运行时库中使用的库 但我对任何 pascal 实现都很感兴趣 我关心它的运行时复杂性 的最佳实现不相交集数据结构 are in O log n
  • 如何将 Mapbox SDK 与 SwiftUI 集成

    我将 Mapbox SDK 安装到我的项目中 但我不明白如何将此代码片段与SwiftUI 我创建了一个 SwiftUIView named MapView 我在其中导入 Mapbox 框架 我尝试使用UIViewRepresentable协
  • MySQL LEFT JOIN 3 个表

    我有3张桌子 Persons PersonID Name SS Fears FearID Fear Person Fear ID PersonID FearID 现在我想列出每个与他们相关的恐惧的人 可以是多种恐惧 也可以没有 即使一个人没
  • 为什么 com.typesafe.slick#slick_2.11;2.0.2: not find 出现 UNRESOLVED DEPENDENCIES 错误?

    我正在尝试从类型安全激活器运行 hello slick 示例 当我输入 run 时 我在 sbt 中创建一个项目 它给出了以下错误 warn warn UNRESOLVED DEPENDENCIES warn warn com typesa
  • 循环遍历文件以计算字段数

    我有一个 bash 脚本来从 txt 文件添加用户 这真的很简单 name firstname uid gid 空格分隔值 我想用 awk 检查每行是否包含 4 个字段 如果是我想返回1 如果不是返回0 file my file txt a
  • 谷歌地图:与用户一起顺利移动标记和地图?

    一旦用户打开该功能并直至终止它 我必须在谷歌地图中显示实时 实时用户移动位置 我已经使用下面的方法来为标记设置动画 private void animateMarker final Marker marker final LatLng to
  • ClickOnce 不遵守本地主机的安装文件夹

    我正在测试 ClickOnce 应用程序部署 我已经在我的机器上设置了一个虚拟目录 运行 IIS 我已指定http localhost SampleApplication作为 Visual Studio 的 发布 选项卡中的安装文件夹 UR
  • 在 AngularJS 中处理转换后的数据

    我有一个时间戳列表 我可以用 AngularJS 列出它们 不过我想将其列为日期字符串 这些日期字符串应该是可编辑的 完成后我也希望更新相关的时间戳 我的第一个问题是 AngularJS 以不同格式 过滤器 呈现项目并仍然具有双向数据绑定的
  • VIM 浏览器插件对文件执行命令

    我正在尝试 NERDtree 它非常酷 但我想做的是在所选文件上执行特殊命令或脚本 例如 我想突出显示树中的一个图像文件 按某个键并在原始文件中插入适当的 XHTML 标签 我有一个小脚本来进行格式化 我只需要在文件上运行它 或者在选择模块
  • Qt 事件和信号/槽

    在Qt世界中 事件和信号 槽有什么区别 一个会取代另一个吗 事件是信号 槽的抽象吗 在 Qt 中 信号和事件都是观察者模式 它们用于不同的情况 因为它们有不同的优点和缺点 首先 让我们准确定义 Qt 事件 的含义 Qt 类中的虚函数 如果您
  • Flutter FormatException:意外的字符(在字符 1 处)

    在 flutter 中 我使用一个 php 文件 该文件从数据库查询返回 json 响应 但是当我尝试解码 json 时 我收到此错误 E flutter 8294 ERROR flutter lib ui ui dart state cc
  • Jquery选择图像

    首先 我是 Jquery 的新手 我有这样的图像 我想要的是 当用户单击图像时 它会使图像带有边框 用户可以选择多个图像 选择时所有内容都必须带有边框 单击按钮后 我将获得图像 ID tr img src urlofimage tr gt
  • 比较两个文件在 python 中报告的差异

    我有 2 个名为 hosts 的文件 位于不同的目录中 我想使用 python 比较它们 看看它们是否相同 如果它们不相同 我想在屏幕上打印差异 到目前为止我已经尝试过这个 hosts0 open dst1 hosts r hosts1 o