Python动态提取CSV指定区间行数据并按规则命名导出方案
Python动态提取CSV指定区间数据实现方案
核心适配逻辑
放弃硬编码行号的skiprows、固定切片iloc写法,通过动态匹配目标表头位置定位数据段,不受CSV前置说明行数量变动影响,自动适配不同版本的表结构。
前置依赖
先安装表格处理依赖库:
pip install pandas
完整实现代码
import pandas as pd from datetime import datetime import csv # 基础配置 csv_file_path = "你的源CSV文件路径.csv" target_headers = {"Deal ID", "Deal Name", "Origination Date", "Maturity Date"} # 从表头行开始计算的总提取行数,对应需求中第5行(表头)到第8行的区间长度 total_extract_rows = 4 # 动态定位目标表头所在行索引 header_index = None with open(csv_file_path, 'r', encoding='utf-8') as f: reader = csv.reader(f) for row_idx, row_content in enumerate(reader): cleaned_cells = {cell.strip() for cell in row_content if cell.strip()} if target_headers.issubset(cleaned_cells): header_index = row_idx break if header_index is None: raise RuntimeError("源文件未匹配到目标表头,请检查字段是否完整") # 从表头位置开始读取指定长度的数据 extract_df = pd.read_csv( csv_file_path, skiprows=header_index, nrows=total_extract_rows - 1 ) # 按规则生成动态文件名 current_year_month = datetime.now().strftime("%Y%m") output_path = f"ExtensionReport{current_year_month}.csv" # 保存结果,utf-8-sig编码避免Excel打开乱码 extract_df.to_csv(output_path, index=False, encoding='utf-8-sig') print(f"提取完成,文件已保存至:{output_path}")
注:如果读取时提示编码错误,可将代码中
encoding参数替换为gbk,适配国内常用的CSV导出编码格式。
原有方案报错原因
固定写skiprows=4、iloc[4:8]这类硬编码逻辑的容错性为0,只要源文件前置的说明、空行数量发生变动,表头位置偏移后就会把非表头文本识别为列名,后续切片、字段匹配时就会触发列不存在、数据类型错误等报错。动态匹配表头的方案只要目标字段名不变,无论前置内容行数怎么调整都能准确定位到目标数据段。
内容的提问来源于stack exchange,提问作者cmpunk
相关产品推荐
相关产品推荐

