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版本坑:md5例子(python2与python3中md5区别)

    在Python 2和Python 3中,md5模块的使用方式有所不同。下面是一个关于Python版本坑:md5例子的攻略,其中包含了一些示例说明。 Python 2中的md5 在Python 2中,您可以使用md5模块来计算MD5哈希值。以下是一个示例,展示如何使用md5模块: import md5 # 计算字符串的MD5哈希值 hash = md5.new…

    python 2023年5月13日
    00
  • python解析.pyd文件的详细代码

    在介绍“Python解析.pyd文件的详细代码”的攻略前,需要先了解一下.pyd文件的概念和作用。.pyd文件是Python编写的动态链接库文件,提供扩展函数和数据的接口。Python解析.pyd文件的过程实际上就是加载这个动态链接库并调用其中的函数或变量。 接下来分为以下几步进行详细讲解: 步骤一:导入ctypes模块 要在Python中解析一个.pyd文…

    python 2023年6月5日
    00
  • 基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解

    基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解 背景 滚动计算是在时间序列分析中常用的一种方法,可以通过计算滚动方差或标准差来评估数据的波动性和风险。在Python中,有多种方法可以实现滚动计算,其中较为常见的是使用talib和pd.rolling这两个库。本文将对比这两种方法的异同,并给出一些示例。 talib库 tal…

    python 2023年5月13日
    00
  • python 模块重载的五种方法

    Python 模块重载的五种方法 在Python中,我们可以通过定义模块来将代码分离成不同的文件,方便管理和维护。但是在开发过程中,我们经常需要对模块进行修改,然后重新加载模块,这时候就需要用到模块重载了。本文将介绍 Python 模块重载的五种方法。 方法一:使用 reload() 函数 最基本的模块重载方法就是使用内置函数 reload()。通过调用 r…

    python 2023年6月2日
    00
  • Python 包装代替状态变化

    Python包装可以用于替代状态变化,也就是说,一个函数不会改变输入参数的状态,而是返回一个新的对象或者其他值。这样可以避免让程序在不需要的时候修改输入参数的状态,从而造成不必要的副作用。本文将介绍Python包装的使用方法和应用场景,并提供两个示例说明。 包装的基本概念 在Python中,我们可以使用函数和类来创建包装器。 使用函数进行包装 def wra…

    python-answer 2023年3月25日
    00
  • Python3基础之基本运算符概述

    Python3基础之基本运算符概述 在Python3中,有一些基本运算符可以用来进行数学计算、逻辑运算等。本文将对Python3中常用的基本运算符进行详细讲解。 算术运算符 Python3的算术运算符包括加(+)、减(-)、乘()、除(/)、取余(%)、整除(//)和幂运算(*)。下面分别进行讲解。 加(+) 加号(+)可以用于两个数的相加,也可以用于字符串…

    python 2023年6月3日
    00
  • python调用c++ ctype list传数组或者返回数组的方法

    以下是“Python调用C++ ctypes传数组或者返回数组的方法”的完整攻略。 1. 传递数组 在Python中,可以使用ctypes库调用C++函数,并递数组作为参数。以下是一个简单例。 示例1:传递整型数组 设我们有一个名为my_array的整型数组,我们想要将其传递给C++。我们可以使用以下代码来实现。 import ctypes # 加载动态链接…

    python 2023年5月13日
    00
  • 前端正则表达式书写及常用的方法

    以下是详细讲解“前端正则表达式书写及常用的方法”的完整攻略。 1. 什么是正则表达式 正则表达式是一种用于匹配字符串的模式,它可以用检查一个字符串是否符合某种模式,或者从一个字符串中提取出符合某种模式的子串。在前端开发中正则表达式常用于表单验证、字符串处理、路由匹配等场景。 2. 正则表达式的基本语法 正则表达式由普通字符和特殊字符组成,其中特殊字符用于表示…

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