Pandas读取固定键值结构多TXT语料生成对应列DataFrame的方法咨询
Pandas批量解析固定格式TXT语料生成结构化DataFrame的实现方法
你手头的语料为多份独立TXT文件,单份文件严格遵循逐行字段名:字段值的固定结构,单文件格式示例如下:
TITLE: 对应标题内容 URL: 对应链接地址 META: 对应元信息 DATE: 对应发布日期 AUTHOR(S): 对应作者信息 TEXT: 对应文本正文
目标是批量读取所有文件,生成包含title、url、meta、date、author、text对应列的结构化DataFrame。
核心实现逻辑
- 批量遍历目标目录下所有后缀为.txt的语料文件,无需逐个手动读取
- 逐行解析单份文件内容,匹配原文件字段与目标DataFrame列名的对应关系
- 将每份文件解析得到的键值对汇总为统一的字典列表,直接转换为Pandas DataFrame
解析时需要注意:分隔字段的冒号只切分第一处,避免字段值内部本身带的冒号(比如URL中的协议分隔符、正文内容中的冒号)被误切割
可直接复用的核心代码
import os import pandas as pd # 建立原文件字段名到目标列名的映射 field_map = { "TITLE": "title", "URL": "url", "META": "meta", "DATE": "date", "AUTHOR(S)": "author", "TEXT": "text" } # 替换为你实际存放语料TXT的文件夹路径 corpus_folder = "./your_corpus_path" # 存储所有文件解析结果的列表 parsed_records = [] # 遍历目录下所有TXT文件 for _, _, file_list in os.walk(corpus_folder): for file_name in file_list: if file_name.endswith(".txt"): current_file_path = os.path.join(corpus_folder, file_name) current_record = {} # 逐行打开解析文件 with open(current_file_path, "r", encoding="utf-8") as f: for line in f: clean_line = line.strip() # 跳过空行 if not clean_line: continue # 仅按第一处冒号切分字段和值 if ":" in clean_line: field_name, field_value = clean_line.split(":", maxsplit=1) field_name = field_name.strip() field_value = field_value.strip() # 匹配映射关系,存入对应字段值 if field_name in field_map: current_record[field_map[field_name]] = field_value parsed_records.append(current_record) # 生成结构化DataFrame corpus_df = pd.DataFrame(parsed_records)
常见适配调整
- 编码适配:如果读取文件出现乱码,根据你的TXT实际编码修改
open函数的encoding参数,比如将utf-8改为gbk - 多行TEXT字段适配:如果语料中的TEXT正文是跨多行书写的,只需在解析时判断当前行属于TEXT字段内容,逐行拼接到对应值中即可,无需重复修改整体逻辑
- 缺失字段适配:如果个别语料文件缺失某类字段,Pandas会自动将对应DataFrame位置填充为NaN,无需额外做兼容判断
内容的提问来源于stack exchange,提问作者Aslan
相关产品推荐
相关产品推荐

