Python实现大文本文件按1024字符拆分且不破坏完整英文句子的问题
Python 大文本按要求拆分多个子文件的实现方案
核心拆分规则
- 单条子文件字符上限严格为1024
- 完整英文句子(相邻两个句号之间的内容)不得拆分到不同文件,需整体归属同一子文件
- 若完整句子无法放入当前已开始写入的子文件,需整体移入下一个子文件,新子文件独立从0开始统计字符数,确保不超1024上限
现有代码问题
现有实现采用固定长度硬切割文本的逻辑,仅能通过简单回溯句号位置做粗略调整,存在句子拆分逻辑混乱、溢出内容衔接错误、无法逐句校验容量的缺陷,无法满足上述三项拆分要求。
可落地实现代码
import os import re # 配置参数 MAX_CHAR_LIMIT = 1024 OUTPUT_DIR = "/content/trunc" # 替换为你实际读取的大文本内容 doc_text = "your full long text content" # 提前创建输出目录,避免路径不存在报错 os.makedirs(OUTPUT_DIR, exist_ok=True) # 按英文句号切分完整句子,通过正则零宽断言保留句号在原句末尾,避免内容丢失 sentences = re.split(r'(?<=\.)', doc_text) # 过滤切分后产生的空串(处理连续句号、文本首尾空字符的异常情况) sentences = [s.strip() for s in sentences if s.strip()] current_buffer = "" file_index = 0 for sent in sentences: # 拼接前校验:当前缓冲区长度+待加入句子长度是否超过字符上限 if len(current_buffer) + len(sent) > MAX_CHAR_LIMIT: # 把当前缓冲区已有内容写入完成的子文件 if current_buffer: output_path = os.path.join(OUTPUT_DIR, f"{file_index}.txt") with open(output_path, "w", encoding="utf-8") as f: f.write(current_buffer) file_index += 1 # 清空缓冲区,将溢出的完整句子整体移入新缓冲区 current_buffer = sent else: # 未超上限则直接拼接句子到当前缓冲区 current_buffer += sent # 处理最后缓冲区剩余的内容,写入最后一个子文件 if current_buffer: output_path = os.path.join(OUTPUT_DIR, f"{file_index}.txt") with open(output_path, "w", encoding="utf-8") as f: f.write(current_buffer)
规则匹配校验
- 句子完整性:所有拆分动作以完整句子为最小单元,不存在单个句子被截断拆分到不同文件的情况
- 字符上限:每次拼接内容前提前计算累计长度,严格保证单文件字符数不超过1024
- 溢出逻辑:当前子文件剩余容量不足时,完整句子整体移交至下一子文件,新文件独立统计字符数,无累计计算偏差
内容的提问来源于stack exchange,提问作者Parsh
相关产品推荐
相关产品推荐

