You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何分割大压缩文本文件为小文本文件?求可行脚本/工具

处理大体积xz压缩语料分割的可行方案

一、使用系统命令行工具(高效首选)

直接结合xzcat和split命令,无需提前解压整个大文件,节省磁盘空间且运行速度更快:

按行数分割(每个文件10万行)

xzcat hu.txt.xz | split -l 100000 -d --additional-suffix=".txt" - hu_part_

参数说明:

  • -l 100000:每个输出文件固定包含100000行
  • -d:用数字作为文件后缀(如hu_part_00、hu_part_01)
  • --additional-suffix=".txt":给输出文件添加.txt后缀
  • -:指定从标准输入读取数据
  • hu_part_:输出文件的前缀名称

按大小分割(每个文件小于1GB)

xzcat hu.txt.xz | split -b 950M -d --additional-suffix=".txt" - hu_part_

参数说明:

  • -b 950M:限制每个文件最大为950MB(留余量避免超过1GB)
  • 其余参数含义与按行数分割一致

二、优化后的Python脚本

避免一次性加载整个文件到内存,采用逐行读取、分批写入的方式,同时直接处理xz压缩文件,内存占用极低:

import lzma

def split_xz_file(input_path, lines_per_file=100000, max_size_mb=950):
    max_size = max_size_mb * 1024 * 1024
    file_counter = 0
    current_line_count = 0
    current_size = 0
    output_file = None

    try:
        # 直接读取xz压缩文件,无需提前解压
        with lzma.open(input_path, 'rt', encoding='utf-8') as infile:
            for line in infile:
                if not output_file:
                    output_filename = f"hu_part_{file_counter:02d}.txt"
                    output_file = open(output_filename, 'w', encoding='utf-8')
                    print(f"生成文件:{output_filename}")

                output_file.write(line)
                current_line_count += 1
                current_size += len(line.encode('utf-8'))

                # 满足行数或大小任一条件则切换新文件
                if current_line_count >= lines_per_file or current_size >= max_size:
                    output_file.close()
                    file_counter += 1
                    current_line_count = 0
                    current_size = 0
                    output_file = None

            # 关闭最后一个未完成的文件
            if output_file:
                output_file.close()
                print(f"生成文件:hu_part_{file_counter:02d}.txt")
    except Exception as e:
        print(f"错误信息:{str(e)}")
        if output_file:
            output_file.close()

if __name__ == "__main__":
    # 优先满足行数限制,其次触发大小限制,可按需调整参数
    split_xz_file("hu.txt.xz", lines_per_file=100000, max_size_mb=950)

脚本说明:

  • 依赖Python内置的lzma模块,无需额外安装
  • 逐行处理数据,内存占用稳定在较低水平
  • 同时监控文件行数和大小,任一条件达标就自动生成新文件
  • 输出文件命名规则清晰,便于后续批量处理

内容的提问来源于stack exchange,提问作者Mohammed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:50:29