Python如何按重复公共表头将大型CSV文件拆分为多个DataFrame
重复表头CSV拆分多DataFrame实现方案
以下两种实现均基于Python + Pandas,可自动匹配任意次数的重复表头,适配不同大小的文件场景。
方案1:先定位表头位置分块读取(低内存占用,适合GB级大文件)
核心逻辑是先逐行扫描文件定位所有表头的行号,再按表头位置分批次读取数据,全程不会一次性加载整个文件到内存。
import pandas as pd # 可根据实际文件修改以下配置参数 csv_path = "你的文件路径.csv" header_content = "Order\tTime\tValue" # 替换为你实际的表头完整内容,匹配分隔符 delimiter = "\t" # CSV分隔符,逗号分隔就改为"," # 第一步:扫描文件获取所有表头的行索引 header_indexes = [] with open(csv_path, "r", encoding="utf-8") as f: for line_idx, line_content in enumerate(f): if line_content.strip() == header_content.strip(): header_indexes.append(line_idx) # 第二步:按表头位置分块读取为DataFrame,结果存入列表 df_list = [] for block_idx in range(len(header_indexes)): start_line = header_indexes[block_idx] # 最后一个块读取到文件末尾,其余块读取到下一个表头的前一行 if block_idx == len(header_indexes) - 1: read_rows = None else: read_rows = header_indexes[block_idx + 1] - start_line - 1 # 读取当前块 current_df = pd.read_csv( csv_path, sep=delimiter, skiprows=start_line, nrows=read_rows ) df_list.append(current_df) # 需要单独调用df1、df2时直接按索引取即可 df1 = df_list[0] df2 = df_list[1]
方案2:全量读取后拆分(代码简洁,适合中小文件)
核心逻辑是一次性读取所有行,遇到表头就切割生成新的DataFrame,代码更易维护。
import pandas as pd from io import StringIO # 可根据实际文件修改以下配置参数 csv_path = "你的文件路径.csv" header_content = "Order\tTime\tValue" delimiter = "\t" with open(csv_path, "r", encoding="utf-8") as f: all_lines = f.readlines() df_list = [] current_block = [] for line in all_lines: # 匹配到新表头时处理上一个块 if line.strip() == header_content.strip(): if current_block: current_df = pd.read_csv(StringIO("".join(current_block)), sep=delimiter) df_list.append(current_df) current_block = [] current_block.append(line) # 处理最后一个数据块 if current_block: df_list.append(pd.read_csv(StringIO("".join(current_block)), sep=delimiter))
鲁棒性优化
如果表头存在多余空格、大小写差异等情况,可将表头匹配逻辑替换为关键词匹配,避免识别失败:
# 替换原有的表头判断代码即可 if all(keyword in line for keyword in ["Order", "Time", "Value"]):
内容的提问来源于stack exchange,提问作者Amir Kooi
相关产品推荐
相关产品推荐

