You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas.read_csv如何跳过行直到匹配指定字符串 类似R fread的skip参数功能

Python中实现类似R fread按字符串匹配跳过行读取csv/tsv的方案

pandas 原生的read_csv/read_table接口没有直接支持向skip参数传入字符串的功能,不过可以通过少量自定义代码实现完全等效的效果,灵活性甚至更高。

基础实现思路

  • 先以文本模式打开目标文件,逐行遍历匹配指定的表头子串,记录需要跳过的行数
  • 将计算得到的跳过行数传给pandas.read_csv的skiprows参数,pandas会自动将匹配到的行作为表头读取

示例代码如下:

import pandas as pd

# 配置参数:要匹配的表头子串、文件路径
header_keyword = "user_id"
file_path = "test.csv"

# 计算需要跳过的行数
skip_num = 0
with open(file_path, "r", encoding="utf-8") as f:
    for line in f:
        if header_keyword in line:
            break
        skip_num += 1

# 读取文件,支持传入所有pandas原生的read_csv参数
df = pd.read_csv(file_path, skiprows=skip_num, sep=",")

封装为可复用工具函数

如果经常用到这个功能,可以封装为自定义函数,调用起来和R的fread一样方便:

import pandas as pd

def read_csv_match_header(file_path: str, header_substr: str, **kwargs):
    """
    读取csv/tsv文件,自动跳过所有行直到找到包含指定子串的表头行
    :param file_path: 文件路径
    :param header_substr: 要匹配的表头子字符串
    :param kwargs: 其他要传给pandas.read_csv的参数,比如sep、encoding等
    """
    skip_rows = 0
    with open(file_path, "r", encoding=kwargs.get("encoding", "utf-8")) as f:
        for line in f:
            if header_substr in line:
                break
            skip_rows += 1
    return pd.read_csv(file_path, skiprows=skip_rows, **kwargs)

# 调用示例:读取tsv文件,找到包含sample_id的行作为表头
df = read_csv_match_header("data.tsv", "sample_id", sep="\t", encoding="gbk")

自定义拓展

你可以根据自己的需求修改匹配逻辑,比如:

  • 匹配完整表头:把判断条件改为if line.strip() == 完整表头字符串
  • 匹配多个关键词:把判断条件改为if all(key in line for key in [关键词列表])
  • 匹配到指定字符串后再多跳过N行:给skip_rows加上对应的数值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:57:04