如何用Python解析列不规范Excel并提取FEED行的filename_pattern值
解决方案
方法一:改进openpyxl代码
你的现有代码仅存储了以行首单元格为key的整行数据,但未定位到filename_pattern列的具体位置。可以分两步实现目标:先找到目标列的索引,再匹配FEED行提取对应值。
from openpyxl import load_workbook file = "mysheet.xlsx" wb_obj = load_workbook(filename=file) wsheet = wb_obj['sheet1'] # 第一步:定位filename_pattern所在的列索引(从0开始计数) target_col_idx = None # 若表头不在第一行,可扩大max_row范围(比如max_row=10)遍历前N行找表头 for row in wsheet.iter_rows(max_row=1): for idx, cell in enumerate(row): if cell.value == 'filename_pattern': target_col_idx = idx break if target_col_idx is not None: break if target_col_idx is None: print("未找到filename_pattern列") else: # 第二步:遍历行找到FEED行,提取对应列的值 target_value = None for row in wsheet.iter_rows(min_row=2): if row[0].value == 'FEED': target_value = row[target_col_idx].value break print(f"提取到的值:{target_value}")
方法二:用pandas处理(适配格式不规范表格)
pandas对格式混乱的Excel兼容性更强,无需严格依赖行列对齐:
import pandas as pd file = "mysheet.xlsx" # 不指定表头,避免自动识别错误导致的匹配失败 df = pd.read_excel(file, sheet_name='sheet1', header=None) # 找到filename_pattern所在的列 target_col = None for col in df.columns: if 'filename_pattern' in df[col].astype(str).values: target_col = col break if target_col is None: print("未找到filename_pattern列") else: # 定位FEED行并提取对应值 feed_row = df[df[0] == 'FEED'] if not feed_row.empty: target_value = feed_row.iloc[0, target_col] print(f"提取到的值:{target_value}") else: print("未找到FEED行")
内容的提问来源于stack exchange,提问作者BigD
相关产品推荐
相关产品推荐

