Python文件写入慢主要因缓冲策略和编码方式不当;应合理设置缓冲区大小、优先用writelines()批量写入、默认选UTF-8编码、必要时用二进制模式跳过编码开销。

Python文件写入慢,往往不是代码逻辑问题,而是缓冲策略和编码方式没调好。合理设置缓冲区、避免频繁小写、选对编码和写入方式,性能能提升数倍甚至一个数量级。
Python内置的open()默认开启行缓冲(终端)或全缓冲(文件),缓冲区大小通常为8192字节。但默认值未必最优:
buffering=1(行缓冲)或手动flush()更可控buffering=65536)可显著减少系统调用次数buffering=0(仅限二进制模式)禁用缓冲,但会极大降低吞吐量,慎用write()反复拼接字符串,优先用writelines()或批量构造每次f.write(s)都涉及Python对象调用和I/O层判断,叠加编码转换开销。例如写10万行:
for line in lines: f.write(line + '\n') —— 10万次函数调用+10万次编码+潜在多次刷缓存f.writelines(line + '\n' for line in lines) 或先'\n'.join(lines)再一次性write() —— 编码和系统调用大幅减少writelines()不自动加换行符,需自行处理写入时字符→字节的编码过程是隐藏瓶颈。实测常见编码相对性能(以10MB中文文本为例):
立即学习“Python免费学习笔记(深入)”;
encoding='utf-8',并确保源数据无非法码点如果对写入内容完全可控(如已知是UTF-8字节流),跳过文本层直接写二进制:
with open('out.bin', 'wb') as f: f.write(data_bytes) —— 避免Python文本I/O的换行符转换、编码/解码、错误处理器等开销data_bytes是合法字节对象,不能传str;换行符需手动写b'\n'
不复杂但容易忽略。把缓冲、批量、编码、模式四点理清楚,多数文件写入性能问题就解决了。
以上就是Python文件写入性能优化_缓冲与编码技巧解析【教学】的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号