如何用Python将多份文本文件按400行分割?split()方法是否适用?
按行数分割大文本文件的Python实现
关于split()方法的适用性
直接使用字符串的split()方法(如file.read().split('\n'))不适合处理这类大文件场景:
- 该方法会一次性将整个文件内容加载到内存中,对于行数过万的大文件,会造成极高的内存占用,甚至触发内存不足的问题。
- 拆分后的行列表还需要额外处理分段逻辑,效率远不如逐行读取的方式。
推荐实现方案
采用逐行读取、累积写入的方式,既能控制内存占用,又能高效完成分割。以下是可直接运行的代码:
import os def split_file_by_lines(source_file, lines_per_chunk=400): # 拆分原文件名与扩展名,用于生成新文件名 base_name, ext = os.path.splitext(source_file) chunk_counter = 1 current_lines = [] # 逐行读取源文件 with open(source_file, 'r', encoding='utf-8') as src: for line in src: current_lines.append(line) # 当累积到指定行数时,写入新文件 if len(current_lines) == lines_per_chunk: chunk_filename = f"{base_name}_{chunk_counter:03d}{ext}" with open(chunk_filename, 'w', encoding='utf-8') as chunk: chunk.writelines(current_lines) current_lines = [] chunk_counter += 1 # 处理剩余不足400行的内容 if current_lines: chunk_filename = f"{base_name}_{chunk_counter:03d}{ext}" with open(chunk_filename, 'w', encoding='utf-8') as chunk: chunk.writelines(current_lines) # 遍历目标文件夹下的所有文本文件(可替换为你的文件目录) target_directory = '.' # 当前目录,可修改为实际路径 for filename in os.listdir(target_directory): # 仅处理txt文件,可根据需求调整扩展名 if filename.endswith('.txt'): full_path = os.path.join(target_directory, filename) split_file_by_lines(full_path)
代码说明
- 内存友好:逐行读取文件,每次仅保留最多400行在内存中,适合处理超大文件。
- 自动命名:分割后的文件会以
原文件名_001.txt、原文件名_002.txt的格式命名,避免覆盖。 - 扩展性:可通过修改
lines_per_chunk参数调整每块的行数,修改endswith('.txt')适配其他文本格式。
内容的提问来源于stack exchange,提问作者dmdendd
相关产品推荐
相关产品推荐

