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
相关产品推荐
相关产品推荐

