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
相关产品推荐
相关产品推荐

