如何让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
相关产品推荐
相关产品推荐

