web技术

Python查找Excel数据,单列、全文,模糊、精确查找

2023-10-13 21:27 作者:Admin原创

如何使用 Python 在 Excel 查找数据?如何实现模糊查找和精确查找?如何在一列中查找,又如何全文查找?本文通过两个示例程序为你解答这些问题。

本文程序需要用到 openpyxl 库,如果你还没有安装该库,请先安装:

pip install openpyxl

一、在一列中查找

Python 程序:

from openpyxl import load_workbook

# 查找一列,col_letter 为列号,wd 为搜索词,mode = 0 为模糊查找, mode = 1 为精确查找
def search_column(file_path,sheet_name,col_letter,wd,mode):
    # 加载 Excel 文件
    workbook = load_workbook(file_path)
    # 选择工作表
    sheet = workbook[sheet_name]

    arr = []
    for i in range(sheet.max_row):
        index = col_letter + str(i + 1)
        value = sheet[index].value
        
        if mode == 0 and str(wd) in str(value):
            # arr.append(index)
            arr.append({index : value})
        elif mode == 1 and wd == value:
            arr.append({index : value})

    return arr

# 设置文件名和工作表名,大小写敏感
file_path = '测试的文件.xlsx'
sheet_name = 'Sheet1'

# 要查找的列的字母序号
col_letter = 'E'

# 要查找的内容
wd = '00'

arr = search_column(file_path,sheet_name,col_letter,wd,0)
for val in arr:
    print(val)

在这段程序中,我们自定义了一个函数 search_column(),这个函数有5个参数,其中 col_letter 是要查找的列的字母序号,本例设置为“E”,表示将要查找第 E 列;参数 wd 是要查找的内容,即搜索词、关键词;mode 表示搜索模式,mode = 0 时返回模糊查找结果, mode = 1 时返回精确查找结果,只需在调用函数时设置不同的模式,即可得到不同的结果。col_letter + str(i + 1) 将字母序号和行号组合成单元格坐标,形如“A5”。

{index : value} 将符合查找条件的坐标和值组成一个字典,然后通过 arr.append() 追加到 arr 列表中。如果不想这么复杂,只想返回坐标,那么可以将 arr.append({index : value}) 改为 arr.append(index),而如果你想要获得更详细的查找结果,比如将包含查找结果的整行输出,那么可以将这一行改成:

rows = sheet.iter_rows(min_row=i+1, max_row=i+1, min_col=1, max_col=sheet.max_column, values_only=True)
for row in rows:
	arr.append(row)

或者:

row = []
for j in range(sheet.max_column):
	value = sheet.cell(row=i+1,column=j+1).value
	row.append(value)
arr.append(row)

二、在全文中查找

Python 程序:

from openpyxl import load_workbook

# 全文查找,wd 为搜索词,mode = 0 为模糊查找, mode = 1 为精确查找
def search_all(file_path,sheet_name,wd,mode):
    # 加载 Excel 文件
    workbook = load_workbook(file_path)
    # 选择工作表
    sheet = workbook[sheet_name]

    arr = []
    for i in range(sheet.max_row):
        flag = False
        row = []
        for j in range(sheet.max_column):
            value = sheet.cell(row=i+1,column=j+1).value
            row.append(value)
            if (mode == 0 and str(wd) in str(value)) or (mode == 1 and wd == value):
                flag = True
        if flag:
            arr.append(row)
    return arr

# 设置文件名和工作表名,大小写敏感
file_path = '测试的文件.xlsx'
sheet_name = 'Sheet1'

# 要查找的内容
wd = '00'

arr = search_all(file_path,sheet_name,wd,0)
for val in arr:
    print(val)

在这段程序中,我们自定义了函数 search_all(),在这个函数中,使用两重 for 循环对工作表进行遍历。sheet.max_row 获取 Excel 工作表总行数,for i in range(sheet.max_row) 对所有行进行遍历;sheet.max_column 获取 Excel 工作表总列数,for j in range(sheet.max_column) 对所有列进行遍历,在这层循环中,函数 sheet.cell() 根据行号和列号获取单元格对象,并通过该对象的 value 属性获取单元格的值,追加到行列表 row 中,同时判断该单元格是否符合查找条件,使用 flag 作标志。最后将存在符合条件的单元格的行追加到 arr 列表,返回并打印。

标签: #openpyxl
推荐文章
如何批量修改文件名?你可能在网上搜到了许多方法,但操作起来并不简单,有...
同事找我帮忙,让我帮他写一个Python程序,用来删除Excel中的重复行。于是我...
如何使用Python在Excel中删除行?实际情景中往往是要求按条件删除、批量删除...
同事找我帮忙,希望能帮她写一个文件检测程序,运行程序就能快速找出被修改...
本文讲解如何使用Python在Excel工作表中添加列(追加一列)和插入列(在指定...
推荐专题
如何自己建网站?建网站难不难?其实建网站说难不难,说容易也并不容易,难...
本专题精心收集整理了多种HTML+CSS+JS轮播图实现方案,带详细代码和讲解,正...