Python使用xlrd检索Excel指定列含指定字符串的记录

叶初
叶初
发布时间:2026-10-12 | 2人浏览过
原创

本文介绍如何利用Python结合xlrd库自动扫描Excel指定列,筛选包含特定字符串的数据行,并将完整记录按条件命名导出为Txt文件。

环境准备与注意事项

本方案依赖Python与第三方库xlrd进行表格解析。运行前请确保开发环境满足以下条件:

  • 操作系统与Python解释器版本≥3.6。
  • 通过终端执行 pip install xlrd 安装依赖。
  • 需注意:xlrd 2.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。程序将依次弹出交互请求,请按顺序输入:

  1. 文件路径:输入Excel文件的绝对路径或相对路径(如 C:\data\report.xls)。路径中包含空格时直接粘贴即可,无需额外加引号。
  2. Sheet编号:根据上方打印的列表选择数字。若输入错误超出范围或字符非法,脚本会拦截并提示重新输入。
  3. 目标列索引:输入数字 0 代表首列,1 代表第二列。系统会自动验证索引是否大于等于总列数,防止越界读取报错。
  4. 关键字符串:输入需要匹配的文本片段。程序会直接在内存中比对,支持子串包含模式。

第3步:核对生成的文本文件结果

脚本运行完毕后,会在同级目录下自动生成以关键词命名的 .txt 文件。打开该文件即可看到筛选后的完整数据行,各原始列字段间以双空格分隔,换行符保持原有行结构。此格式便于后续用其他软件导入或直接人工核对。

常见异常排查

  • 编码乱码问题:若原Excel单元格包含非UTF-8字符导致报错,可在读取前使用 bk.set_encoding('cp1252') 显式指定工作簿编码。
  • 权限拒绝:若提示无法打开文件或写入失败,请关闭正在预览该Excel的软件进程,并确保目标磁盘具有读写权限。
  • 匹配精度不足:当前逻辑为子串包含(in)判定。若需精确全等匹配,可将 if testin in cell_value: 替换为 if testin == cell_value:。

以上就是利用Python配合xlrd检索Excel特定列内容并导出记录的详细内容,更多关于Python办公自动化与数据清洗的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表