如何用Python以指定字符串为标识分割大文本文件?
Python实现按指定标识分割大型文本文件
需求描述
需要将包含分割标识Starting The Process的大型文本文件,分割为多个子文件,每个子文件包含从该标识开始到下一个标识前的所有内容(包含标识行本身)。示例文件会被分割为3个独立的子文件,每个文件对应一段以标识开头的内容块。
现有尝试代码
用户已能定位到包含标识的行,但无法提取分割后的内容并写入新文件:
logfile = "E:/DATA/result.txt" with open(logfile, 'r') as text_file: lines = text_file.readlines() for line in lines: if "Starting The Process..." in line: print(line)
解决方案代码
以下是完整的实现代码,处理大型文件时也能高效运行(无需一次性读取全部内容到内存):
input_file = "E:/DATA/result.txt" split_marker = "Starting The Process..." file_counter = 1 current_content = [] with open(input_file, 'r', encoding='utf-8') as f: for line in f: # 检测到分割标识时,先把之前的内容写入文件(如果有) if split_marker in line: if current_content: with open(f"file{file_counter}.txt", 'w', encoding='utf-8') as out_f: out_f.writelines(current_content) file_counter += 1 current_content = [] # 将当前标识行加入新的内容块 current_content.append(line) else: # 非标识行,加入当前内容块 current_content.append(line) # 处理最后一个内容块 if current_content: with open(f"file{file_counter}.txt", 'w', encoding='utf-8') as out_f: out_f.writelines(current_content)
代码说明
- 内存友好:逐行读取输入文件,避免一次性加载大文件占用过多内存
- 分割逻辑:
- 初始化计数器和当前内容列表,用于跟踪子文件编号和当前待写入的内容
- 每遇到分割标识时,先将之前收集的内容写入已编号的子文件,然后重置内容列表,开始收集新的内容块
- 遍历结束后,处理最后一段未触发分割标识的内容块
- 编码处理:指定
encoding='utf-8'确保文件读写时的编码一致性,避免乱码
内容的提问来源于stack exchange,提问作者Cheries
相关产品推荐
相关产品推荐

