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

使用Pandas从书籍TXT文件创建DataFrame遇解析错误求助

古登堡书籍TXT元数据提取:解决ParserError问题

问题根源

直接调用pd.read_csv()读取古登堡项目的TXT文件完全错误——这类文件不是标准CSV格式。古登堡书籍的元数据(Title、Author等)集中在文件开头,以字段名: 内容的键值对形式存在,后续是正文内容。CSV解析器会因为行结构不统一(部分行的"字段数"超出预期)触发Tokenizer错误,也就是你遇到的Expected 2 fields in line 60, saw 3。

正确解决方案

单文件元数据提取

先实现一个函数,专门提取古登堡TXT中的指定元数据字段:

import pandas as pd

def extract_gutenberg_meta(file_path):
    meta = {}
    target_fields = {'Title', 'Author', 'Release Date', 'Language'}
    
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            # 古登堡文件以*** START OF ... ***作为元数据结束标志
            if line.startswith('*** START OF'):
                break
            # 仅分割第一个冒号,避免字段内容含冒号导致错误
            if ': ' in line:
                key, val = line.split(': ', 1)
                if key in target_fields:
                    meta[key] = val.strip()
    return meta

# 测试单文件
single_meta = extract_gutenberg_meta('dataset/10001.txt')
df_single = pd.DataFrame([single_meta])
print(df_single)

批量处理1000+文件

遍历目录下所有TXT文件,批量提取元数据并生成DataFrame:

import os

data_dir = 'dataset'
all_meta_list = []

for filename in os.listdir(data_dir):
    if filename.endswith('.txt'):
        file_path = os.path.join(data_dir, filename)
        meta = extract_gutenberg_meta(file_path)
        # 补全缺失字段为NaN,保证DataFrame结构统一
        for field in ['Title', 'Author', 'Release Date', 'Language']:
            meta.setdefault(field, None)
        all_meta_list.append(meta)

# 生成最终DataFrame
final_df = pd.DataFrame(all_meta_list)
# 可保存为CSV便于后续处理
final_df.to_csv('gutenberg_books_meta.csv', index=False)

原代码报错的具体原因

pd.read_csv()默认以逗号作为字段分隔符,它会把古登堡TXT中字段: 内容的行识别为2个字段,但第60行的内容可能包含额外的冒号或空格,导致解析器误判为3个字段,最终抛出ParserError。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:20:12