You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python对比两个Excel单元格差异时如何忽略第一列

Python比对xlsx逐单元格查差异(忽略第一列)

你现有代码除了缺少忽略第一列的逻辑,还存在变量名重复赋值、未定义变量、缩进错误的问题,修正后可直接运行的版本如下:

import xlrd
from itertools import zip_longest

# 读取两个目标工作簿
ds1 = xlrd.open_workbook("PATH1")
ds2 = xlrd.open_workbook("PATH2")
# 修正原代码重复赋值、变量名不统一的问题
sheet1 = ds1.sheet_by_index(0)
sheet2 = ds2.sheet_by_index(0)

# 按两个表的最大行数循环遍历
for rownum in range(max(sheet1.nrows, sheet2.nrows)):
    # 两张表都存在当前行时,逐列比对
    if rownum < sheet1.nrows and rownum < sheet2.nrows:
        row_rb1 = sheet1.row_values(rownum)
        row_rb2 = sheet2.row_values(rownum)

        for colnum, (c1, c2) in enumerate(zip_longest(row_rb1, row_rb2)):
            # 跳过第一列(xlrd列索引从0开始,0对应Excel的A列/第一列)
            if colnum == 0:
                continue
            if c1 != c2:
                print(f"Row {rownum+1} Col {colnum+1} - {c1} != {c2}")
    # 处理某张表缺失当前行的场景
    else:
        if rownum >= sheet1.nrows:
            print(f"Row {rownum+1} missing in first file")
        else:
            print(f"Row {rownum+1} missing in second file")

核心修改说明

  • 忽略第一列的实现逻辑:列循环中判断列索引为0时直接跳过,不做差异校验。如果后续需要忽略前N列,只需要把判断条件改为if colnum < N即可,比如忽略前2列就写if colnum < 2
  • 修复了原代码中重复给SHEET1赋值、引用未定义的POB_ds1/SHEET1_ds1变量的问题
  • 修正了原代码缩进错误导致的行缺失判断逻辑异常,现在可以准确提示某张表缺行的情况
  • 另一种实现思路是取行值时直接切片去掉第一列:row_rb1 = sheet1.row_values(rownum)[1:]、row_rb2 = sheet2.row_values(rownum)[1:],但这种写法要注意后续打印列号时需要给colnum+2,因为切片后列索引整体左移了一位,容易出现列号标注错误,更推荐循环内跳过的写法。

内容的提问来源于stack exchange,提问作者Ashwin Shaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 04:51:31