如何在 CSV 文件中动态定位数据起始行并用 Pandas 读取-Python教程

当 csv 文件头部存在不固定长度的元信息(如标题、说明、空行等),且关键列头(如 `[deal type]`)是唯一可靠定位标识时,可通过逐行扫描文件流跳过无关内容,再将剩余部分交由 `pandas.read_csv()` 解析,避免重复读取或硬编码行号。

在实际数据处理场景中,许多业务系统导出的 CSV 并非标准格式:前若干行常包含报表名称、生成时间、机构信息、分隔线等非结构化内容,而真正用于分析的表格数据往往从某个特征性列头(例如 [Deal Type]、”ID,Name,Amount” 或 “交易类型,客户编号,金额”)才开始。由于这类“前导噪声”的行数每日变动,skiprows 参数无法静态设定,而一次性加载全文本再用字符串查找又浪费内存——最优解是利用 Python 文件对象的迭代特性,在流式读取中精准定位起始点,并将后续行直接传递给 Pandas。

以下为推荐实现方式(兼容真实文件与内存模拟):

import pandas as pd

def read_csv_from_header(filepath, header_marker="[Deal Type]"):
    """
    从指定标记行开始读取 CSV,支持任意长度前导内容。

    Parameters:
    -----------
    filepath : str
        CSV 文件路径
    header_marker : str
        标识数据起始的首行文本(支持子串匹配,如 "[Deal Type]" 或 "Deal Type")

    Returns:
    --------
    pd.DataFrame
        解析后的数据框,自动推断列名与数据类型
    """
    with open(filepath, 'r', encoding='utf-8') as f:
        # 逐行扫描,跳过所有非目标行
        for line in f:
            if header_marker in line or line.strip().startswith(header_marker):
                # 找到后,当前 file 对象指针已位于目标行之后
                # 使用 f 作为 StringIO 类似的数据流传入 read_csv
                return pd.read_csv(f, skipinitialspace=True)

    raise ValueError(f"未在文件 {filepath} 中找到标记行: '{header_marker}'")

# ✅ 使用示例(真实文件)
# df = read_csv_from_header("daily_report.csv")

# ✅ 使用示例(测试用字符串模拟)
from io import StringIO

test_data = """Counterparty Name
ID Number

.
.

Asset
USD.HO
USD.LCO
USD.RB

Cpty:
Product:

[Deal Type], [column], [value]
A, 100, 25.5
B, 200, 32.1
C, 150, 28.7
"""

df = read_csv_from_header(StringIO(test_data))
print(df)

关键要点说明:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 如何在 CSV 文件中动态定位数据起始行并用 Pandas 读取-Python教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3991972+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3991972+
  • 本周更新: 0+
  • 最后更新: 2026-03-16