You need to enable JavaScript to run this app. 通过标记关键字定位CSV指定区块 利用pandas读取区间有效数据
优惠活动
大模型
产品
解决方案
定价
更多

通过标记关键字定位CSV指定区块 利用pandas读取区间有效数据

带特殊边界标记CSV的Pandas读取方案

实现逻辑

  • 精准定位$$SOE与$$EOE两个标记的行位置,仅读取两个标记包裹的业务数据段,全程跳过前置、后置冗余内容
  • 流式逐行读取文件,不一次性加载全量文件入内存,适配GB级大文件场景
  • 自动适配示例文件中“字段带前置空格、中间夹杂空列、行尾带多余逗号”的格式特征

可直接运行的代码实现

第一步:定位两个标记的行号位置

import pandas as pd

# 替换为实际文件路径
file_path = "target_file.csv"
soe_row = None
eoe_row = None

# 逐行扫描匹配标记,遇到结束标记直接终止扫描,减少无意义IO
with open(file_path, "r", encoding="utf-8") as f:
    for row_idx, row_content in enumerate(f):
        stripped_content = row_content.strip()
        if stripped_content == "$$SOE":
            soe_row = row_idx
        if stripped_content == "$$EOE":
            eoe_row = row_idx
            break

# 标记完整性校验
if soe_row is None or eoe_row is None:
    raise ValueError("未在文件中完整识别到$$SOE/$$EOE标记,请检查文件内容")

第二步:读取标记区间内的有效数据

target_df = pd.read_csv(
    file_path,
    skiprows=soe_row + 1,  # 跳过$$SOE行及之前的所有冗余内容
    nrows=eoe_row - soe_row - 1,  # 仅读取两个标记之间的有效行数
    header=None,  # 目标数据段无内置表头,关闭自动表头识别
    skipinitialspace=True,  # 自动清除字段前后的冗余空格
    encoding="utf-8"
)

示例场景适配调整

  • 清理全空列:读取完成后执行target_df = target_df.dropna(axis=1, how="all"),可直接移除示例中夹杂的两个全空列
  • 日期格式转换:对第一列的日期字符串执行target_df[0] = pd.to_datetime(target_df[0]),即可转为pandas原生时间类型,支持后续时间筛选、聚合计算
  • 编码适配:如果文件是Windows导出的gbk编码,将open和read_csv中的encoding="utf-8"替换为encoding="gbk"即可正常读取,不会出现乱码

性能特性

  • 标记扫描阶段逐行读取,不会一次性加载大文件进内存
  • pandas读取阶段基于行偏移流式解析,源文件达到10G以上规模也不会出现内存溢出
  • 扫描阶段遇到$$EOE标记会提前终止读取,不会加载标记后的冗余内容,进一步降低IO耗时

内容的提问来源于stack exchange,提问作者reillyderrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 10:54:01