Python使用xlrd检索Excel指定列含指定字符串的记录
本文介绍如何利用Python结合xlrd库自动扫描Excel指定列,筛选包含特定字符串的数据行,并将完整记录按条件命名导出为Txt文件。
环境准备与注意事项
本方案依赖Python与第三方库xlrd进行表格解析。运行前请确保开发环境满足以下条件:
- 操作系统与Python解释器版本≥3.6。
- 通过终端执行
pip install xlrd安装依赖。 - 需注意:
xlrd2.0.0及以上版本出于安全考量已移除对.xlsx格式的读取支持,仅兼容传统.xls文件。若需处理新版Excel,建议替换为openpyxl库。
第1步:编写数据检索脚本
在本地新建 excel_filter.py 文件,粘贴以下代码。脚本核心逻辑为:遍历目标工作表单元格值,判断是否包含用户输入的关键词,并将命中的整行数据以空格分隔追加至文本文件。
import os
import xlrd
# 1. 获取文件名及路径
filename = input('输入Excel文件名称及完整路径: ')
if not os.path.isfile(filename):
raise FileNotFoundError(f'{filename} 不是有效的文件路径')
# 2. 打开工作簿并列出所有Sheet供选择
wb = xlrd.open_workbook(filename)
for idx, sheet in enumerate(wb.sheets()):
print(f'编号({idx}): {sheet.name}')
# 3. 选择目标Sheet并校验索引
while True:
try:
sname = int(input('请选择要检查的Sheet编号(输入数字并回车): '))
sh = wb.sheets()[sname]
break
except Exception:
print('该编号不存在,请重新输入')
nrows = sh.nrows
ncols = sh.ncols
print(f'Sheet信息: 行数:{nrows}, 列数:{ncols}')
# 4. 输入目标列索引并校验范围
while True:
columnnum = int(input('请输入要检查的列索引(第一列为0,请填写数字): '))
if 0 <= columnnum < ncols:
break
print(f'索引超出范围(有效范围 0-{ncols-1}),请重新输入')
# 5. 输入搜索字符串
testin = input('请输入要检索的关键字符串: ')
# 6. 执行检索并导出
outputfilename = testin + '.txt'
with open(outputfilename, 'w', encoding='utf-8') as outputfile:
for i in range(nrows):
cell_value = str(sh.cell_value(i, columnnum))
if testin in cell_value:
row_data = sh.row_values(i)
outputfile.write(' '.join(str(item) for item in row_data) + '\n')
print(f'\n检索完成!命中记录已保存至: {outputfilename}')
第2步:运行脚本并按提示交互操作
打开终端或命令行工具,切换至脚本所在目录并执行 python excel_filter.py。程序将依次弹出交互请求,请按顺序输入:
- 文件路径:输入Excel文件的绝对路径或相对路径(如
C:\data\report.xls)。路径中包含空格时直接粘贴即可,无需额外加引号。 - Sheet编号:根据上方打印的列表选择数字。若输入错误超出范围或字符非法,脚本会拦截并提示重新输入。
- 目标列索引:输入数字
0代表首列,1代表第二列。系统会自动验证索引是否大于等于总列数,防止越界读取报错。 - 关键字符串:输入需要匹配的文本片段。程序会直接在内存中比对,支持子串包含模式。
第3步:核对生成的文本文件结果
脚本运行完毕后,会在同级目录下自动生成以关键词命名的 .txt 文件。打开该文件即可看到筛选后的完整数据行,各原始列字段间以双空格分隔,换行符保持原有行结构。此格式便于后续用其他软件导入或直接人工核对。
常见异常排查
- 编码乱码问题:若原Excel单元格包含非UTF-8字符导致报错,可在读取前使用
bk.set_encoding('cp1252')显式指定工作簿编码。 - 权限拒绝:若提示无法打开文件或写入失败,请关闭正在预览该Excel的软件进程,并确保目标磁盘具有读写权限。
- 匹配精度不足:当前逻辑为子串包含(
in)判定。若需精确全等匹配,可将if testin in cell_value:替换为if testin == cell_value:。
以上就是利用Python配合xlrd检索Excel特定列内容并导出记录的详细内容,更多关于Python办公自动化与数据清洗的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









