使用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
相关产品推荐
相关产品推荐

