os:用于与操作系统交互,如文件/目录路径操作、环境变量读取、文件存在性判断等;shutil:提供高级文件操作功能,如复制、移动、删除文件或目录(如shutil.copy(),shutil.rmtree());openpyxl:用于读写 Excel(.xlsx)文件的第三方库,支持创建、修改工作簿、工作表、单元格数据、样式、公式等。
⚠️ 注意:使用openpyxl前需确保已安装(可通过pip install openpyxl安装),且它不支持.xls(旧版 Excel)格式,仅支持.xlsx、.xlsm、.xltx、.xltm。
常见用途示例:
- 用
openpyxl.load_workbook()打开现有 Excel 文件; - 用
workbook.active或workbook['SheetName']获取工作表; - 用
sheet['A1'].value = 'Hello'写入单元格; - 用
workbook.save('output.xlsx')保存更改。
使用openpyxl读取 Excel 中某一列(例如列 “A”)的所有非空值,可按以下步骤操作:
✅ 正确做法(推荐,高效且安全):
fromopenpyxlimportload_workbook# 加载工作簿(只读模式更省内存,适合大文件)wb=load_workbook('data.xlsx',read_only=True)# 注意:read_only=True 时不能修改,但更快更省内存ws=wb.active# 或 wb['Sheet1']# 方法1:遍历该列所有有数据的单元格(推荐,自动跳过空白行)column_data=[]forcellinws['A']:# A 列所有单元格(从 A1 开始向下)ifcell.valueisnotNoneandstr(cell.value).strip()!='':# 排除 None 和纯空白字符串column_data.append(cell.value)wb.close()# read_only=True 时必须显式关闭print(column_data)✅ 补充说明:
ws['A']返回一个生成器(generator),逐行访问 A 列所有单元格(包括空单元格),但不会加载整张表到内存(尤其在read_only=True下);- 若需处理含公式、日期、数字、布尔等类型,
cell.value已自动解析为 Python 原生类型(如datetime.date,int,bool); - 若需严格排除空白字符串、空格、换行符,用
str(cell.value).strip()是稳妥做法; - ❌ 避免用
ws.max_row+ 循环索引(如ws[f'A{i}'].value),因max_row可能不准(尤其删除行后未刷新)。
🔧 进阶:读取指定列(如第3列 → ‘C’ 列)或按列号(ws.iter_cols(min_col=3, max_col=3, values_only=True)):
# 更灵活:按列号获取整列值(values_only=True 直接返回值元组)col_values=list(ws.iter_cols(min_col=1,max_col=1,values_only=True))[0]# 第1列(A列)non_empty=[vforvincol_valuesifvisnotNoneandstr(v).strip()]