Python如何按指定大小读取文件片段并写入新文件?
精确读取指定字节数的文件内容方案
嘿,我懂你要的是字节级精确的文件读取需求——linecache确实是按行来处理的,完全没法满足这种精准到MB级的读取要求,咱们换个思路用Python原生的文件操作来解决,简单又靠谱。
核心思路是直接操作文件的字节流,避开文本模式下的编码/换行符转换干扰,确保读取的字节数完全准确。这里给你写好代码,直接就能用:
SOURCE_FILE = "你的10GB大文件路径.txt" TARGET_FILE = "输出的25MB文件.txt" # 把25MB转换成字节数:25 * 1024KB * 1024字节 = 26214400字节 EXACT_SIZE = 25 * 1024 * 1024 # 用二进制模式打开文件,保证字节级操作的准确性 with open(SOURCE_FILE, "rb") as source_file, open(TARGET_FILE, "wb") as target_file: # 如果你需要从文件中间某个位置开始读取,比如跳过前3GB,就加这行: # source_file.seek(3 * 1024 * 1024 * 1024) # 一次性读取精确的25MB字节内容 extracted_content = source_file.read(EXACT_SIZE) # 写入目标文件 target_file.write(extracted_content)
为啥这个方案靠谱?
- 二进制模式:用
rb/wb模式操作时,Python不会对文件内容做任何编码转换或换行符替换(比如Windows的\r\n不会被转成\n),完全按原始字节处理,确保读取的大小绝对精准。 - 一次性读取:
read(EXACT_SIZE)会直接读取指定字节数的内容,只要源文件剩余大小≥25MB,就能拿到刚好25MB的内容;如果文件剩下的不足,就会读取剩余全部(不过你的源文件是10GB,肯定够)。 - 自动资源管理:
with上下文管理器会自动帮你关闭文件,不用担心忘记关闭导致的资源泄漏问题。
之前用linecache不行的原因也很明确:它是为按行读取设计的,只能按行号返回内容,没法精确控制总字节数——毕竟每行的长度都不一样,凑出来的字节数肯定没法刚好是25MB。
内容的提问来源于stack exchange,提问作者muc777
相关产品推荐
相关产品推荐

