Python读取CSV时跳过前置行并提取其信息整合为DataFrame列
处理方案
直接用Python+pandas即可实现,不需要额外第三方库,代码会自动识别前置元信息段,不需要手动指定跳过行数,适配同格式下元信息行数略有差异的CSV文件。
核心处理逻辑:
- 逐行读取CSV原始内容,包含
:的行判定为元信息行,拆分为键值对存储 - 碰到第一个无
:、用;分隔的行判定为表格表头,后续行均为表格数据 - 将提取到的元信息作为固定列,拼接到当前文件所有表格行的前部
- 遍历所有目标CSV文件,将单文件处理结果拼接为最终的总DataFrame
实现代码
import pandas as pd import os def process_single_csv(file_path): # 读取文件所有非空行,去除首尾空白字符 with open(file_path, 'r', encoding='utf-8') as f: lines = [line.strip() for line in f if line.strip()] meta_info = {} table_start_pos = 0 # 遍历提取元信息,直到定位到表头行 for idx, line in enumerate(lines): if ':' in line: key, value = [item.strip() for item in line.split(':', 1)] meta_info[key] = value else: table_start_pos = idx break # 解析表头和表格主体 table_header = [col.strip() for col in lines[table_start_pos].split(';')] table_data = [] for line in lines[table_start_pos+1:]: row = [cell.strip() for cell in line.split(';')] table_data.append(row) # 生成单文件DataFrame,拼接元信息列并调整列顺序 df = pd.DataFrame(table_data, columns=table_header) for col_name, col_val in meta_info.items(): df[col_name] = col_val df = df[list(meta_info.keys()) + table_header] return df def batch_merge_csv(csv_dir): df_list = [] for filename in os.listdir(csv_dir): if filename.lower().endswith('.csv'): single_df = process_single_csv(os.path.join(csv_dir, filename)) df_list.append(single_df) # 合并所有单文件数据 return pd.concat(df_list, ignore_index=True) # 调用示例 if __name__ == "__main__": # 替换为存放目标CSV的文件夹路径 final_df = batch_merge_csv("./your_csv_directory") # 可直接导出为处理好的合并文件 final_df.to_csv("merged_result.csv", sep=";", index=False)
注意事项
- 如果你的CSV文件编码不是UTF-8,修改
open函数里的encoding参数即可,比如国内常用的GBK编码就填encoding="gbk" - 代码默认自动清理单元格前后的多余空格,输出格式和你给出的预期结果对齐
- 如果元信息的判定规则有调整,直接修改遍历行时的判断条件即可适配
内容的提问来源于stack exchange,提问作者Oalvinegro
相关产品推荐
相关产品推荐

