Python实现光速定位并提取两个文件的不同之处

目录
  • 比较Excel
  • 比较Word
  • 结束语

如果你经常与Excel或Word打交道,那么从两份表格/文档中找到不一样的元素是一件让人很头疼的工作,当然网上有很多方法、第三方软件教你如何对比两份文件。本文就将以两份真实的Excel/Word文件为例,讲解如何使用Python光速对比并提取文件中的不同之处!

比较Excel

为了方便说明,我创建了一个简单的Excel用于示例

可以看到上方两个Excel表格中共有五处不同,现在我们使用Python来快速定位这五处不同,这次不需要openpyxl,使用Pandas就能轻松搞定,首先导入相关库并读取数据

import pandas as pd
import numpy as np
df1 = pd.read_excel('data1.xlsx')
df2 = pd.read_excel('data2.xlsx')

其实在Pandas中一行代码就能找到两个DataFrame的不同

可以看到,如果一样的数据就是NaN,而变化的数据则以它的值存储,但是如果这么做的话,我们仅仅找到数据不同的位置,并且数据量大的话盯着找到不同也挺消耗时间的,所以我们进一步研究。先换一种方式找到不同的值

接着再使用NumPy根据True/False定位元素位置,同时将值的改变写入原表格并保存

rows,cols=np.where(comparison_values==False)
for item in zip(rows,cols):
    df1.iloc[item[0], item[1]] = '{} --> {}'.format(df1.iloc[item[0], item[1]],df2.iloc[item[0], item[1]])
df1.to_excel('diff.xlsx',index=False,header=True)

现在就生成了一个新的Excel来提示我们哪里发生了变化

这样看起来就舒服了很多(高亮是手动的),当然在进行两个Excel比较的时候一定要注意这两个Excel的数据格式要差不多!

比较Word

两份Word比较起来相对于Excel就困难一点。首先我们还是创建两份有区别的Word文档,内容取自百度百科中的Python介绍[1]

左边的为原始word右边的word是我修改了几处的文档, 现在我们用Python来快速找到两份文档的不同。读取文件使用到的是docx库[2] ,因为涉及到中文所以我们需要先读取docx文件,然后分段再根据标点符号分句,具体代码如下

def getText(wordname):
    '''
    提取文字
    '''
    d = Document(wordname)
    texts = []
    for para in d.paragraphs:
        texts.append(para.text)
    return texts

def is_Chinese(word):
    '''
    识别中文
    '''
    for ch in word:
        if '\u4e00' <= ch <= '\u9fff':
            return True
    return False

def msplit(s, seperators = ',|\.|\?|,|。|?|!|、'):
    '''
    根据标点符号分句
    '''
    return re.split(seperators, s)

def readDocx(docfile):
    '''
    读取文档
    '''
    print(f"======正在读取{docfile}======")
    paras = getText(docfile)
    segs = []
    for p in paras:
        temp = []
        for s in msplit(p):
            if len(s) > 2:
                temp.append(s.replace(' ', ""))
        if len(temp) > 0:
            segs.append(temp)
    return segs

使用上面这段代码读一下两个word试试

可以看到我们的word文件已经按照不同段落分好句存在两层list中,所以接下来的问题就转换为比较两个list,而这又是我们熟悉的

def comparsion(doc1,doc2,p,s):
    if doc1 == doc2:
        print('两个word完全一致')
    else:
        if doc1[p][s] != doc2[p][s]:
            print(f"第{p+1}段,第{s+1}句不相同: {doc1[p][s]} ----> {doc2[p][s]}")

上面的判断为最简单的形式:两个word中仅有文字改变,而段落、句子数量均没有改变,我们来试一下效果

只要一秒,Python就找到了两份word文档之间的不同之处并定位!

结束语

通过介绍如何使用Python来对两个Excel/Word文件进行比较,我想你应该体会到了Python的强大之处,其实思路无非就是读取文件、定位之处并标记。但更重要的是你在日常工作学习时是否可以想到用Python去解决那些繁琐费力的流程,学会使用Python合理偷懒才是我写办公自动化系列的目的。

到此这篇关于Python实现光速定位并提取两个文件的不同之处的文章就介绍到这了,更多相关Python文件不同之处内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python导入不同文件夹中文件的方法详解

    目录 前言 一.导入同一目录下的文件 二.导入不同目录下的文件 1. 调用子目录下的文件 2.导入上级目录下的文件 关于 init.py 附:python 导入一个文件夹下的所有文件 总结 前言 在写 python 程序的时候,经常会用到引入其他文件夹里的 py 文件,要是都在同目录下直接 import 就好了,可是有的不在同一个目录,很多时候就直接 import 报错了.下面介绍导入文件的方法: 一.导入同一目录下的文件 如下图,main.py 和 config.py 文件都在同一个目录. 如

  • 使用python快速实现不同机器间文件夹共享方式

    Python有一个比较好用的功能,那就是很方便的实现共享文件夹. 首先两台主机都需要安装python,在未建立逻辑连接之前它们是不区分主从机的. 例如:现在有两台机器,一台windows和一台linux,现在你想要让linux机器的文件夹被共享,那么 1.就在linux机器下的期望被共享的文件夹下执行: python –m SimpleHTTPServer (端口号,可选,默认是8000) 2.在windows机器下,打开浏览器,输入: http://linux机器IP:8000 就可以访问到l

  • python引入不同文件夹下的自定义模块方法

    初学Python,这个问题搞了我好久,现在来分享下我的解决思路,希望可以帮到大家. 先说下python引入模块的顺序:首先现在当前文件夹下查找,如果没有找到则查找Python系统变量中的模块.所以说,当我们引入同一个文件夹下的自定义模块时,可以很顺利的引入而不会报错.那么问题来了,不同文件夹下的呢?也用一样的方法吗? 举个栗子: 现在我们想在subPack1文件下的module_1.py中引入subPack2下的module_2.py. 但是我们在module_1.py中写下: import s

  • python 不同方式读取文件速度不同的实例

    1.按行读取较慢较耗时: srcFiles = open('inputFile.txt', 'r') for file_path in srcFiles: file_path = file_path.rstrip() 2.快速读取所有行: with open('inputFile.txt', 'r') as fRead: srcPaths = fRead.readlines() #txt中所有字符串读入list列表srcPaths random.shuffle(srcPaths) #打乱list

  • python爬不同图片分别保存在不同文件夹中的实现

    例如,爬取赵丽颖,赵本山,赵文卓,赵欢,赵日天的图片分别保存在赵丽颖,赵本山,赵文卓,赵欢,赵日天命名的文件夹中, 测试代码 别的图就不放了 import requests import time import os # 请求头,伪装成浏览器 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116

  • Python实现光速定位并提取两个文件的不同之处

    目录 比较Excel 比较Word 结束语 如果你经常与Excel或Word打交道,那么从两份表格/文档中找到不一样的元素是一件让人很头疼的工作,当然网上有很多方法.第三方软件教你如何对比两份文件.本文就将以两份真实的Excel/Word文件为例,讲解如何使用Python光速对比并提取文件中的不同之处! 比较Excel 为了方便说明,我创建了一个简单的Excel用于示例 可以看到上方两个Excel表格中共有五处不同,现在我们使用Python来快速定位这五处不同,这次不需要openpyxl,使用P

  • Python爬虫Xpath定位数据的两种方法

    方法一:直接右键,将文章路径复制下来点击Copy full Xpath 使用selenium+lxml中的etree进行配合使用,使用etree解析html网页 import requests from lxml import etree import time import socket import csv from selenium import webdriver from configparser import ConfigParser from selenium.webdriver

  • Python Pandas删除替换并提取其中的缺失值NaN(dropna,fillna,isnull)

    目录 前言 Pandas中缺少值NaN的介绍 将缺失值作为Pandas中的缺少值NaN 缺少值NaN的删除方法 删除所有值均缺失的行/列 删除至少包含一个缺失值的行/列 根据不缺少值的元素数量删除行/列 删除特定行/列中缺少值的列/行 pandas.Series 替换(填充)缺失值 用通用值统一替换 为每列替换不同的值 用每列的平均值,中位数,众数等替换 替换为上一个或下一个值 指定连续更换的最大数量 pandas.Series 提取缺失值 提取特定行/列中缺少值的列/行 提取至少包含一个缺失值

  • python中从str中提取元素到list以及将list转换为str的方法

    在python中时常需要从字符串类型str中提取元素到一个数组list中,例如str是一个逗号隔开的姓名名单,需要将每个名字提取到一个元素为str型的list中. 如姓名列表str = 'Alice, Bob, John',需要将其提取为name_list = ['Alice', 'Bob', 'John']. 而反过来有时需要将一个list中的字符元素按照指定的分隔符拼接成一个完整的字符串.好在python中str类型本身自带了两种方法(method)提供了相应的功能. str转为list 使

  • 使用python进行文本预处理和提取特征的实例

    如下所示: <strong><span style="font-size:14px;">文本过滤</span></strong> result = re.sub(r'[^\u4e00-\u9fa5,.?!,.::" "' '( )< >〈 〉]', "", content)#只保留中文和标点 result = re.sub(r'[^\u4e00-\u9fa5]', ""

  • Python+Opencv身份证号码区域提取及识别实现

    前端时间智能信息处理实训,我选择的课题为身份证号码识别,对中华人民共和国公民身份证进行识别,提取并识别其中的身份证号码,将身份证号码识别为字符串的形式输出.现在实训结束了将代码发布出来供大家参考,识别的方式并不复杂,并加了一些注释,如果有什么问题可共同讨论.最后重要的事情说三遍:请勿直接抄袭,请勿直接抄袭,请勿直接抄袭!尤其是我的学弟学妹们,还是要自己做的,小心直接拿我的用被老师发现了挨批^_^. 实训环境:CentOS-7.5.1804 + Python-3.6.6 + Opencv-3.4.

  • Python自动化之定位方法大杀器xpath

    一.xpath:基本属性定位 上一篇文章讲了通过元素的id.name.class这些属性定位的用户,使用xpath方法结合元素属性也可以很准确的定位元素,如下图 于是可以用以下xpath方法定位 二.xpath:其他属性定位 在实际工作过程中,往往会遇到一个元素id.name.class属性都没有,这时候也可以通过其它属性定位到 三.xpath:标签定位 在实际工作中,还会遇到一种情况就是相同属性具有同一个名字,这时就需要通过标签筛选,定位更准一点 如果不想制定标签名称,可以用*号表示任意标签

  • python实现精准搜索并提取网页核心内容

    目录 各种尝试 生成PDF 提取文章内容 选择最优 总结 文 | 李晓飞 来源:Python 技术「ID: pythonall」 爬虫程序想必大家都很熟悉了,随便写一个就可以获取网页上的信息,甚至可以通过请求自动生成 Python 脚本[1]. 最近我遇到一个爬虫项目,需要爬取网上的文章.感觉没有什么特别的,但问题是没有限定爬取范围,意味着没有明确的页面的结构. 对于一个页面来说,除了核心文章内容外,还有头部,尾部,左右列表栏等等.有的页面框架用 div 布局,有的用 table,即使都用 di

  • 如何提取Playwright录制文件中的元素定位信息

    目录 引言 方法研究 提取代码 代码解析 引言 最近组内推行Playwright进行自动化测试,由我封装了一个简单的框架供大家使用.本意是想让大家使用Page Object模式来编写自动化代码的,可是不知道是因为大家嫌麻烦,还是Playwright自带的录制工具太好用,基本上都是先录制,再把录制好的脚本放到框架中执行,结果就是Page Object的优势完全没有享受到,另外我在页面操作中加入了自动等待.重试等优化机制也是,还得在脚本里面一个个处理.由此,我分析大家不愿意用Page Object的

  • Python详细讲解图像处理的而两种库OpenCV和Pillow

    目录 一.简介 1.1 图像处理-OpenCV 1.2 图像处理- PIL和Pillow 二. 常用图像类型 2.1 二值图像 2.2 灰度图像 2.3 RGB图像 2.4 常用颜色空间简介 三.OpenCV图像读写与显示 3.1 读入图像 3.2 显示图像 3.3 写出图像 四.图像几何变换 4.1 图像平移 4.2 图像旋转 4.3 图像缩放 一.简介 实现计算机视觉任务的过程中,不可避免地需要对图像进行读写操作以及图像预处理操作,下面介绍两个常用的Python图像处理库:OpenCV和Pi

随机推荐