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

Python拆分58GB大文本文件后子文件呈十六进制的问题咨询

解决大文件拆分后显示十六进制的问题

这种情况其实挺常见的,不是Python或者split工具的异常行为,核心问题出在文件编码/读写模式和终端、编辑器的显示逻辑差异上,我来给你拆解清楚:

为什么会出现这种现象?

你的58GB大文件大概率是二进制格式,或者包含了非UTF-8的特殊字节序列:

  • 终端的stdout有自动解码逻辑,会尝试把读取到的字节流转换成系统默认编码的可读字符串,所以你直接打印时看起来正常;
  • 但当你用二进制模式写入文件(Python的wb模式),或者用split默认的字节拆分方式处理时,生成的小文件是纯二进制数据。普通文本编辑器打开这类文件时,因为识别不到正确的文本编码,就会默认以十六进制格式显示内容。

Python代码的修复方案

如果你的目标是拆分文本文件,一定要用文本模式读写,而不是二进制模式:

# 推荐的文本拆分方式(按行数拆分,避免二进制问题)
CHUNK_LINE_COUNT = 100000  # 每个小文件存10万行
chunk_num = 1
# 打开原文件时指定编码,用errors='replace'处理无法解码的异常字节
with open("58gb_file.txt", "r", encoding="utf-8", errors="replace") as f_in:
    # 初始化第一个输出文件
    f_out = open(f"chunk_{chunk_num:02d}.txt", "w", encoding="utf-8")
    line_count = 0
    for line in f_in:
        f_out.write(line)
        line_count += 1
        # 达到行数阈值时切换新文件
        if line_count >= CHUNK_LINE_COUNT:
            f_out.close()
            chunk_num += 1
            line_count = 0
            f_out = open(f"chunk_{chunk_num:02d}.txt", "w", encoding="utf-8")
    # 关闭最后一个文件
    f_out.close()

如果你的文件确实是二进制文件(比如包含多媒体数据、二进制日志),那拆分后的十六进制显示是正常的——二进制文件本来就不是给文本编辑器读的,用hexdump或者专门的二进制查看工具打开才是正确方式。

Ubuntu split工具的修复方案

split默认是按字节数拆分,不管内容是文本还是二进制。要拆分文本文件,你需要用-l参数指定按行数拆分:

# 按每10万行拆分文本文件,前缀为chunk_
split -l 100000 58gb_file.txt chunk_

如果原文件是二进制但你想按文本逻辑拆分,可以先用file命令确认文件类型:

file 58gb_file.txt

如果输出是UTF-8 Unicode text,那用上面的-l参数就没问题;如果显示data(二进制文件),那拆分后的十六进制显示就是合理的。

验证小文件是否正常

拆分完成后,你可以用head命令查看小文件的内容,确认是否是正常文本:

head -10 chunk_01.txt

如果能显示正常字符串,说明拆分是正确的,只是编辑器的显示方式问题——你可以在编辑器里手动指定编码(比如UTF-8)来打开文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:35:52