为什么要把这些东西写下来?——《我是一只IT小小鸟》后记

要将一个 **TXT 文本文件**(尤其是小说类、多章节内容)转化为结构化的 **CSV 文件**(每章一条记录),我们需要: ✅ 识别章节标题(如“第1章”、“引子”等) ✅ 按章节切分正文 ✅ 保存为 CSV:`章节标题`, `内容`, `字数` 等字段 --- # ✅ 目标 将如下格式的 TXT 文件: ``` 我的二次元为什么是日常番 第1章 我穿越了 这里是第一章的内容…… 很长的一段文字。 第2章 日常开始 白凡坐在沙发上思考人生…… 新的剧情展开…… (全文完) ``` 转换为 CSV 格式: | chapter_title | content | length | |---------------|--------|--------| | 第1章 我穿越了 | 这里是第一章的内容…… | 56 | | 第2章 日常开始 | 白凡坐在沙发上思考人生…… | 48 | --- # 🚀 Python 脚本:TXT → CSV 批量转换器 ```python # txt_to_csv.py - 将小说TXT按章节拆分为CSV(每章一行) import re import csv import os import sys def split_chapters(txt_path, encoding='utf-8'): """ 读取TXT文件,按章节分割 支持常见标题格式:第X章、序章、终章、番外等 """ try: with open(txt_path, 'r', encoding=encoding, errors='ignore') as f: text = f.read() except UnicodeDecodeError: # 自动尝试 GBK 编码(中文小说常见) with open(txt_path, 'r', encoding='gbk', errors='ignore') as f: text = f.read() # 预处理:清理多余空行和空白字符 lines = [line.strip() for line in text.split('\n') if line.strip()] text = '\n'.join(lines) # 正则匹配章节标题 # 支持:第[数字/汉字]章、第[数字/汉字]节、序章、终章、引子、楔子、番外、后记 等 pattern = r'(第[零一二三四五六七八九十百千\d]+[章节回集卷篇])(?:[\s\.、.]*)((?!(全文完|正文完)).{0,50})|(引子|楔子|序章|终章|后记|番外(?:传)?|回忆篇)(?:\s+)((?!(全文完|正文完)).{0,50})' matches = list(re.finditer(pattern, text)) if len(matches) < 2: print("⚠️ 未检测到足够章节,尝试作为单章处理") return [{ "chapter_title": "正文", "content": text[:2000], "length": len(text) }] chapters = [] for i in range(len(matches)): start = matches[i].start() end = matches[i + 1].start() if i + 1 < len(matches) else len(text) content = text[start:end].strip() # 提取标题 m = matches[i] title = ''.join([g for g in m.groups()[:-2] if g]).strip() if not title: title = f"第{i+1}章" # 过滤太短的内容(可能是误匹配) if len(content) < 100: continue chapters.append({ "chapter_title": title, "content": content, "length": len(content) }) print(f"✅ 成功提取 {len(chapters)} 个章节") return chapters def convert_txt_to_csv(txt_file, csv_file): """主函数:转换单个TXT为CSV""" if not os.path.isfile(txt_file): raise FileNotFoundError(f"❌ 找不到文件: {txt_file}") chapters = split_chapters(txt_file) # 写入CSV with open(csv_file, 'w', encoding='utf-8-sig', newline='') as f: writer = csv.DictWriter(f, fieldnames=["chapter_title", "content", "length"]) writer.writeheader() writer.writerows(chapters) print(f"\n🎉 转换完成!共 {len(chapters)} 条数据已保存至:\n {csv_file}") # ================== 使用示例 ================== if __name__ == "__main__": input_txt = "novel.txt" # 修改为你自己的路径 output_csv = "novel.csv" # 输出路径 if len(sys.argv) == 3: input_txt = sys.argv[1] output_csv = sys.argv[2] convert_txt_to_csv(input_txt, output_csv) ``` --- ## ✅ 使用方法 ### 方法一:直接运行(修改路径) ```bash python txt_to_csv.py ``` > 修改代码中的 `input_txt` 和 `output_csv` 路径即可。 ### 方法二:命令行传参 ```bash python txt_to_csv.py "我的小说.txt" "output.csv" ``` --- ## ✅ 示例输出(CSV 内容) ```csv chapter_title,content,length 第1章 我穿越了,"第1章 我穿越了\n这里是第一章的内容……很长的一段文字。",56 第2章 日常开始,"第2章 日常开始\n白凡坐在沙发上思考人生……新的剧情展开……",48 ``` > 💡 注:`content` 字段包含原始章节标题 + 正文,便于后续训练或展示。 --- ## ✅ 进阶功能建议 | 功能 | 实现方式 | |------|---------| | 批量转换多个 TXT | 加个 `for file in os.listdir(...)` 循环 | | 去除广告句 | `re.sub(r'(本书由.*?发布)|(转载请注明出处)', '', content)` | | 添加小说名字段 | 从文件名提取 `os.path.basename(path).replace('.txt','')` | | 导出 JSONL | 用于 AI 训练:`jsonl` 每行一个 JSON 对象 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值