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

如何让Pandas自动识别并跳过文本文件开头的非CSV内容?

动态判断Pandas读取TSV文件的起始行

针对带注释头的制表符分隔(TSV)文件,可以通过预扫描文件识别数据行特征的方式,自动确定需要跳过的行数,避免固定值失效的问题。以下是两种可靠的实现方案:

方案1:通过数据行特征(U+开头)判断

你的数据行均以U+开头,这是最精准的识别标志,代码如下:

import pandas as pd

# 预扫描文件,找到第一个数据行的行号
start_row = 0
with open('Unihan_IRGSources.txt', 'r', encoding='utf-8') as f:
    for line in f:
        stripped_line = line.strip()
        # 跳过空行和#开头的注释行
        if stripped_line and stripped_line.startswith('U+'):
            break
        start_row += 1

# 读取数据,指定制表符分隔,自定义列名
df = pd.read_csv(
    'Unihan_IRGSources.txt',
    sep='\t',
    skiprows=start_row,
    header=None,
    names=['Unicode编码', '字段名', '字段值'],
    encoding='utf-8'
)

方案2:通过列数判断

如果数据行固定为3列(制表符分隔),也可以通过分割后的列数识别:

import pandas as pd

start_row = 0
with open('Unihan_IRGSources.txt', 'r', encoding='utf-8') as f:
    for line in f:
        # 按制表符分割并过滤空字符串(处理多制表符情况)
        columns = [col.strip() for col in line.split('\t') if col.strip()]
        if len(columns) == 3:
            break
        start_row += 1

# 读取数据
df = pd.read_csv(
    'Unihan_IRGSources.txt',
    sep='\t',
    skiprows=start_row,
    header=None,
    names=['Unicode编码', '字段名', '字段值'],
    encoding='utf-8'
)

关键说明

  • 两种方案都会动态跳过所有开头的注释行和空行,无论未来文件注释行数如何变化都能适配
  • 由于是制表符分隔,必须显式指定sep='\t',否则Pandas会默认按逗号分割导致解析错误
  • 自定义names参数是因为数据行没有表头,方便后续数据处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:11:27