Python查找Excel数据,单列、全文,模糊、精确查找
如何使用 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 列表,返回并打印。