Python 比较文本文件

在这里插入图片描述

1、问题背景

我们需要比较一个文本文件 F 与路径下多个其他文本文件之间的差异。我们已经编写了以下代码,但只能输出一个文件的比较结果。我们需要修改代码,以便比较所有文件并打印所有结果。

import difflib
import fnmatch
import osfilelist=[]
f= open("D:/Desktop/data/sample/ff69c.txt")
flines= f.readlines()
path="D:/Desktop/data/sample/sample2"
for root, dirnames, filenames in os.walk(path):  for filename in fnmatch.filter(filenames, '*.txt'):   filelist.append(os.path.join(root, filename))for m in filelist:g=open(m,'r')glines= g.readlines()# g.close()d = difflib.Differ()diff_list = list(d.compare(flines, glines))#print("".join(diff))
n_adds, n_subs, n_eqs, n_wiered = 0, 0, 0, 0for diff_item in diff_list:if diff_item[0] == '+':n_adds += 1elif diff_item[0] == '-':n_subs +=1 elif diff_item[0] == ' ':n_eqs += 1else: n_wiered += 1print 'lines files #1: %d  #2: %d' % (len(flines), len(glines))
print 'adds: %d subs: %d eqs: %d ?:%d '  % (n_adds, n_subs, n_eqs, n_wiered)

2、解决方案

方法一:

问题在于 diff_list 被每次读取的文件覆盖。我们可以修改代码,在每次读取文件时将差异添加到 diff_list 中,而不是覆盖它。

import difflib
import fnmatch
import osfilelist=[]
f= open("D:/Desktop/data/sample/ff69c.txt")
flines= f.readlines()
path="D:/Desktop/data/sample/sample2"
for root, dirnames, filenames in os.walk(path):  for filename in fnmatch.filter(filenames, '*.txt'):   filelist.append(os.path.join(root, filename))diff_list = []  # Initialize an empty list to store all differencesfor m in filelist:g=open(m,'r')glines= g.readlines()d = difflib.Differ()diff_list.extend(list(d.compare(flines, glines)))  # Append differences to diff_listn_adds, n_subs, n_eqs, n_wiered = 0, 0, 0, 0for diff_item in diff_list:if diff_item[0] == '+':n_adds += 1elif diff_item[0] == '-':n_subs +=1 elif diff_item[0] == ' ':n_eqs += 1else: n_wiered += 1print 'lines files #1: %d  #2: %d' % (len(flines), len(glines))
print 'adds: %d subs: %d eqs: %d ?:%d '  % (n_adds, n_subs, n_eqs, n_wiered)

现在,代码将比较所有文件,并将所有结果打印出来。

方法二:

另一种方法是使用 filecmp.cmp 函数来比较文件。filecmp.cmp 函数接受两个文件路径作为参数,并返回一个布尔值,表示这两个文件是否相等。

import filecmp
import osfilelist=[]
f= open("D:/Desktop/data/sample/ff69c.txt")
flines= f.readlines()
path="D:/Desktop/data/sample/sample2"
for root, dirnames, filenames in os.walk(path):  for filename in fnmatch.filter(filenames, '*.txt'):   filelist.append(os.path.join(root, filename))for file1 in filelist:for file2 in filelist:if filecmp.cmp(file1, file2, shallow=False):print(f"{file1} and {file2} are equal.")else:print(f"{file1} and {file2} are different.")

这种方法不需要读取文件内容,因此速度更快,但它只比较文件的二进制内容,不比较文件的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/1188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lobechat 的基本使用流程

一、安装 下载lobechart的页面代码 $ git clone https://github.com/lobehub/lobe-chat.git $ cd lobe-chat $ pnpm install $ pnpm run dev注意:node环境要18以上 二、使用本地模型 1.安装ollama 2.通过ollama 下载本地模型 llama2(选择合适的本地模型…

[阅读笔记16][Orca-2]Teaching Small Language Models How to Reason

接下来是Orca-2,这篇是微软在23年11月发表的论文,在Orca-1的基础上又进行了一些改进。 作者希望教会Orca-2各种推理策略,例如逐步思考、回忆然后回答、先回忆再推理再回答、直接生成回答等等策略。并且Orca-2应该能针对不同任务应该使用最合适…

【leetcode面试经典150题】64. 删除排序链表中的重复元素 II(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

袁庭新ES系列15节|Elasticsearch客户端基础操作

前言 上一章节我们介绍了搭建Elasticsearch集群相关的知识。那么又该如何来操作Elasticsearch集群呢?在ES官网中提供了各种语言的客户端,我们在项目开发过程中有多种Elasticsearch版本和连接客户端可以选择,那么他们有什么区别?这…

Golang内存、指针逃逸、垃圾回收机制概览

最近看到了一篇文章是关于go的内存、指针逃逸和垃圾回收机制的,发现自己并未很细致的了解过这方面的内容,于是在翻阅各种文章的情况下,写出了这篇总结,参考文章放在文末,可自取 内存 Go 语言使用一个自带的垃圾收集器…

修复vite中使用react提示Fast refresh only works when a file only exports components.

前言 我通过 vite 构建了一个 react 应用并使用 react.lazy 来懒加载组件,但是在使用过程中 一直提示 Fast refresh only works when a file only exports components. Move your component(s) to a separate file.eslint(react-refresh/only-export-components)。…

PSA Group EDI 需求分析

PSA集团(以下简称PSA)中文名为标致雪铁龙集团,是一家法国私营汽车制造公司,致力于为全球消费者提供独具特色的汽车体验和自由愉悦的出行方案,旗下拥有标致、雪铁龙、DS、欧宝、沃克斯豪尔五大汽车品牌。 汽车制造企业对…

动力学重构/微分方程参数拟合 - 基于模型

这一篇文章,主要是给非线性动力学,对微分方程模型参数拟合感兴趣的朋友写的。笼统的来说,这与混沌系统的预测有关;传统的机器学习的模式识别虽然也会谈论预测结果,但他们一般不会涉及连续的预测。这里我们考虑的是&…

Rokid AR Lite空间计算套装发布,中国空间计算踏上差异化领先之路

动动手指、动动眼睛就可以“操控一切”,这种颇具科幻感、未来感的交互方式,令许多人感叹“未来已来”。而这令人震撼的变革背后,正是空间计算技术的迅猛崛起与广泛应用,使得这种曾经只存在于想象中的交互方式,如今正逐…

循环神经网络(RNN):概念、挑战与应用

循环神经网络(RNN):概念、挑战与应用 1 引言 1.1 简要回顾 RNN 在深度学习中的位置与重要性 在深度学习的壮丽图景中,循环神经网络(Recurrent Neural Networks,RNN)占据着不可或缺的地位。自从…

Linux 磁盘管理和文件系统

硬盘的物理结构: 盘片硬盘有多个盘片,每盘片2面磁头每面一个磁头 硬盘的数据结构: 扇区盘片被分为多个扇形区域,扇区:每个扇区存放512字节的数据,硬盘的最小存储单位磁道同一盘片不同半径的同心圆,是由磁…

软件设计师软考中项学习(二)之计算机系统基础知识

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 学习目标学习内容学习笔记学习总结 学习目标 计算机系统硬件基本组成 中央处理…

友思特应用 | 红外视角的延伸:短波红外相机的机器视觉应用

导读 短波红外SWIR在不同波段针对不同材料的独特成像特征为各领域检测应用的拓宽提供了基础。本文将展现短波红外成像技术在水分检测、塑料检测、太阳能电池板检查和矿场开采等领域的丰富应用案例,讨论短波红外相机在未来的发展方向。 SWIR 背景简介 短波红外 &am…

上位机图像处理和嵌入式模块部署(树莓派4b和视觉slam十四讲)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 实际使用中,树莓派4b是非常好的一个基础平台。本身板子价格也不是很贵,建议大家多多使用。之前关于vslam,也就是…

R语言中的execl数据转plink

文章目录 带出外部连接的方式添加列的方式从列表中选出对应的数据信息查看变量信息没有成功 带出外部连接的方式 点击这个黄色的按钮就可以弹出外部链接的方式 添加列的方式 创建一个数据框的方式 我们创建一个三行三列的数据方式 df <- data.frame(name c("Alice&…

【CSS】深入理解:BFC究竟是什么?

深入理解&#xff1a;BFC究竟是什么&#xff1f; 在我们了解BFC之前&#xff0c;我们先来看看什么是FC 1. FC的概念 FC全称 Formatting Context ,元素在标准流里面都属于一个FC 块级元素的布局都属于Block Formatting Context,也就是BFC block level box都是在BFC中布局的 …

利用AQS(AbstractQueuedSynchronizer)实现一个线程同步器

目录 1. 前言 2. 什么是同步器 3. 同步器实现思路 Semaphore(信号量) 4. 代码实现 4.1. 创建互斥锁类 4.2 编写静态内部类&#xff0c;继承AQS 4.3 内部类实现AQS钩子函数 4.3 封装lock&#xff0c;unlock方法 4.4. 测试 5. 总结 本文章源码仓库&#xff1a;Conc…

【算法刷题 | 回溯思想 06】4.17(子集、子集||)

文章目录 9.子集9.1题目9.2解法&#xff1a;回溯9.2.1回溯思路&#xff08;1&#xff09;函数返回值以及参数&#xff08;2&#xff09;终止条件&#xff08;3&#xff09;遍历过程 9.2.2代码实现 10.子集 ||10.1题目10.2解法&#xff1a;回溯10.2.1回溯思路10.2.2代码实现 9.子…

(2022级)成都工业学院数据库原理及应用实验五: SQL复杂查询

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 在实验三的基础上完成下列查询&#xff1a; 1、查询医生…

DSSAT作物模型建模方法与进阶基于Python语言快速批量运行DSSAT模型及交叉融合、扩展应用技术应用

随着数字农业和智慧农业的发展&#xff0c;基于过程的作物生长模型&#xff08;Process-based Crop Growth Simulation Model&#xff09;在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。Decisi…