使用xlrd读取xls构建列表时如何在遇到首个空行时停止读取
正确实现代码
你需要用普通循环配合break实现读取到第一个空行就终止的逻辑,列表推导式无法实现提前终止遍历的需求,参考实现如下:
import xlrd # 此处保留你原有打开xls文件、获取worksheet对象ws的逻辑 data = [] for row_idx in range(ws.nrows): # 先读取当前行所有单元格数据 current_row = [ws.cell_value(row_idx, col_idx) for col_idx in range(ws.ncols)] # 判断当前行是否为全空行 is_empty_row = all( ws.cell(row_idx, col_idx).ctype in (xlrd.XL_CELL_EMPTY, xlrd.XL_CELL_BLANK) for col_idx in range(ws.ncols) ) if is_empty_row: # 遇到第一个空行直接终止读取 break data.append(current_row)
原有代码报错原因
- 列表推导式语法错误:标准列表推导式结构为
[目标表达式 for 迭代变量 in 迭代器 if 过滤条件],你将if条件放在了for语句之前,不符合语法规则 - 未定义变量:代码中直接使用了
cell.ctype,但你没有提前定义cell变量,运行时会触发未定义错误 - 逻辑不符合需求:即使修复语法错误,列表推导式也会遍历表格所有行,只会过滤掉空行而非遇到第一个空行就停止,会读取到第一个空行之后的非空内容,不符合你的要求
内容的提问来源于stack exchange,提问作者delalma
相关产品推荐
相关产品推荐

