Python中openpyxl实现vlookup函数的实例

下面是“Python中openpyxl实现vlookup函数的实例”的完整实例教程:

介绍

openpyxl 是 Python 用来操作 Excel 文件的库,可以方便的读写 Excel 文件。在实际工作中,我们会经常需要根据某一列的值从另一个表格中找到对应的值,这个场景下就用到了 vlookup 函数。我们可以使用 openpyxl 模块来实现这个功能。

实例1: 使用vlookup函数从另一个表格中获取值

首先,我们需要准备两个 Excel 文件,一个是源文件(source.xlsx), 一个是参照文件(lookup.xlsx)。在参照文件中,我们会查找名字对应的ID。

链接: https://pan.baidu.com/s/1KPblTWG6WWtDSfT_PVEZIg 密码: vapo

在源文件中,每个人的名字可以对应一个分数。我们需要将每个人的分数添加到参照文件中。桥梁就是vlookup函数。我们需要在参照文件中的 ID 列中查找源文件中的名字,并且在相应的行中填写分数。代码如下:

from openpyxl import load_workbook

source_file = 'source.xlsx'
lookup_file = 'lookup.xlsx'

source_wb = load_workbook(source_file, read_only=True)
lookup_wb = load_workbook(lookup_file)
lookup_ws = lookup_wb.active

# 获取名字和分数
source_ws = source_wb.active
names = [cell.value for cell in source_ws['A'][1:]]
scores = [cell.value for cell in source_ws['B'][1:]]

# 填写分数到参照文件中
for row in lookup_ws.iter_rows(min_row=2, min_col=1, max_col=2):
    id_cell, name_cell = row
    for i, name in enumerate(names):
        if name == name_cell.value:
            score = scores[i]
            lookup_ws.cell(row=id_cell.row, column=3, value=score)
            break

# 保存参照文件
lookup_wb.save(lookup_file)

运行上面的代码后,参照文件中的第三列里,每个 ID 对应的分数都填好了。

实例2: 使用vlookup函数比较两个表格内容是否一致

实际工作中,我们有时需要对比两个 Excel 文件中的数据是否一致。这时就可以使用 vlookup 函数来实现,首先我们先要得到两个文件的 MD5 值,然后将它们的值进行比较。代码如下:

import hashlib
from openpyxl import load_workbook

file1 = 'source.xlsx'
file2 = 'target.xlsx'

# 获取MD5值
def getFileMd5(filename):
    with open(filename, 'rb') as f:
        md5obj = hashlib.md5()
        md5obj.update(f.read())
        hash = md5obj.hexdigest()
        return hash

source_md5 = getFileMd5(file1)
target_md5 = getFileMd5(file2)

if source_md5 == target_md5:
    print('两个文件内容一致')
else:
    source_wb = load_workbook(file1, read_only=True)
    target_wb = load_workbook(file2, read_only=True)

    source_ws = source_wb.active
    target_ws = target_wb.active

    for cell in source_ws['A']:
        col_index = cell.col_idx
        name = cell.value
        if name is None:
            break

        for row in target_ws.iter_rows(min_row=2, min_col=col_index, max_col=col_index):
            if row[0].value == name:
                if cell.offset(column=1).value != row[0].offset(column=1).value:
                    print(f'{name}文件内容不一致')
                break
        else:
            print(f'{name}在目标文件中不存在')

运行上面的代码后,如果两个文件的 MD5 值不一致,代码会输出所有不一致的地方。如果 MD5 值一致,代码会输出“两个文件内容一致”。

以上就是两个使用 openpyxl 实现 vlookup 函数的例子。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中openpyxl实现vlookup函数的实例 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 自定义Python版本ESL库访问FreeSWITCH

    环境:CentOS 7.6_x64Python版本:3.9.12FreeSWITCH版本 :1.10.9 一、背景描述 ESL库是FreeSWITCH对外提供的接口,使用起来很方便,但该库是基于C语言实现的,Python使用该库的话需要使用源码进行编译。如果使用系统自带的Python版本进行编译,过程会比较流畅,就不描述了。这里记录下使用自定义Python版…

    python 2023年4月25日
    00
  • python队列原理及实现方法示例

    Python队列原理及实现方法示例 队列是一种常见的数据结构,它是按照先进先出(First-In-First-Out, FIFO)的原则进行操作的线性表。本文将详细介绍Python中队列的原理及实现方法示例。 队列的原理: 队列的原理使用队列可以将输入数据暂时存放,等待后续程序处理。在Python中,可以使用queue模块来实现队列的相关操作。 queue模…

    python 2023年5月19日
    00
  • 使用 Selenium 和 Python 抓取后从 HTML 源中提取数据表

    【问题标题】:Extracting data tables from HTML source after scraping using Selenium & Python使用 Selenium 和 Python 抓取后从 HTML 源中提取数据表 【发布时间】:2023-04-05 12:06:01 【问题描述】: 我正在尝试从这个link 中抓取数…

    Python开发 2023年4月5日
    00
  • python ipset管理 增删白名单的方法

    首先,我们需要了解一下什么是ipset。ipset是一个能够高效地管理大量IP地址、子网和端口等信息的工具。它支持多种匹配方式,可以对网络流量进行筛选。在使用python进行ipset管理时,我们可以使用python的ipset模块,这个模块提供了一些方便的操作方法。 以下是python ipset管理白名单的方法: 1. 安装ipset模块 在使用pyth…

    python 2023年6月3日
    00
  • python中的全局变量与局部变量

    1,局部变量与全局变量 1,定义 局部变量:就是在函数体内的变量,在python中冒号“:”后面的变量都是局部变量,当然局部与全局也是一个相对的概念。比如出现函数嵌套的情况。 全局变量:就是在模块中所有函数都可以调用的变量,一般在函数体外被定义。   2,使用过程 函数内的局部变量,在函数体外是不可以使用的,函数内的变量就是局部变量,只在函数体内生效。 例如…

    python 2023年4月25日
    00
  • python使用tcp实现局域网内文件传输

    下面是“python使用tcp实现局域网内文件传输”的攻略: 准备工作 确保你的电脑和接收文件的电脑在同一局域网内,可以相互通信; 安装Python 3.x版本; 确保你的防火墙或安全软件没有对文件传输进行限制。 实现步骤 编写服务端代码 服务端代码主要用来监听客户端发送的请求和获取客户端发送的文件数据。在监听到客户端发送文件请求后,服务端会创建一个新的线程…

    python 2023年6月5日
    00
  • python 使用第三方库requests-toolbelt 上传文件流的示例

    Python使用第三方库requests-toolbelt上传文件流的示例 requests-toolbelt是一个Python库,提供了一些工具来帮助我们更方便地使用requests库。其中包括了上传文件流的功能。本文将介绍如何使用requests-toolbelt库上传文件流,并提供两个示例。 安装requests-toolbelt库 在使用reques…

    python 2023年5月15日
    00
  • python 如何快速复制序列

    通过Python内置的copy模块,我们可以快速地进行序列复制。该模块提供了两种方法用于序列的复制,分别是浅拷贝和深拷贝。接下来将分别介绍这两种方法的使用方法。 浅拷贝 所谓浅拷贝,是指不拷贝被复制的序列中子序列的对象本身,而是仅复制对他们的引用。我们可以使用copy模块中的copy()方法来实现浅拷贝。 示例一 下面的例子演示了如何使用copy()方法来进…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部