如何在Python中以内存高效方式快速写入大体积文件
问题原因
你原有代码的核心问题是将全部待写入内容都存放在内存的字符串变量中,每次循环都翻倍字符串长度,字符串大小会指数级增长,还没到你设置的break条件,内存就会被占满,自然会导致系统卡顿过载。
实现方案
核心逻辑是不将全量内容加载到内存,仅生成固定大小的重复文本块,循环写入文件即可,内存占用稳定在KB到MB级别,速度也能拉满磁盘写入性能。
实现代码
import os # 自定义配置项 TARGET_SIZE_GB = 27 # 目标文件大小,单位GB BASE_TEXT = "This is the text I want to copy 100's of time\n" # 要重复的基础文本 WRITE_BLOCK_SIZE = 1 * 1024 * 1024 # 单次写入块大小,默认1MB,调大可进一步提升写入速度 # 预处理写入块 target_size_byte = TARGET_SIZE_GB * 1024 ** 3 base_text_byte_len = len(BASE_TEXT.encode("utf-8")) # 把基础文本重复到接近块大小,减少IO次数 repeat_per_block = WRITE_BLOCK_SIZE // base_text_byte_len write_block = BASE_TEXT * repeat_per_block block_byte_len = len(write_block.encode("utf-8")) # 计算写入次数和剩余补全大小 full_block_count = target_size_byte // block_byte_len remain_byte = target_size_byte % block_byte_len # 写入文件 with open("output_large_file.txt", "w", encoding="utf-8", buffering=WRITE_BLOCK_SIZE) as f: # 批量写入完整块 for _ in range(full_block_count): f.write(write_block) # 补全剩余字节,保证大小精确 if remain_byte > 0: f.write(write_block[:remain_byte]) # 校验生成结果 final_size_gb = os.path.getsize("output_large_file.txt") / 1024 **3 print(f"文件生成成功,实际大小:{final_size_gb:.2f}GB")
方案说明
- 内存占用极低:全程内存仅占用1MB左右的写入块,无论目标文件多大都不会出现内存过载问题
- 写入效率高:块写入+缓冲区配置,IO次数极少,写入速度仅受磁盘性能限制
- 大小精度可控:最后补全剩余字节的逻辑,可保证生成的文件大小和你设定的27GB完全一致
若你需要使用包含中文等多字节字符的基础文本,可以将文件打开模式改为
wb二进制写入,直接写入bytes类型的块,避免字符串切片截断字符的问题。
内容的提问来源于stack exchange,提问作者Pranjal Doshi
相关产品推荐
相关产品推荐

