我需要使用Python脚本自动生成一个有点大的Makefile。线数预计相对较大。写入文件的例程由嵌套循环,一大堆条件等组成。
我的选择:
以空字符串开头并继续向其添加行,最后使用file.write将大字符串写入文件(pro:只有单个写操作,con:巨大的字符串将占用内存)
从一个空列表开始并继续向其添加行,最后使用file.writelines(专业:单写操作(?),con:巨大的列表占用内存)
在构造文件时将每一行写入文件(专业:不消耗大量内存,con:大量写入操作)
将大量行写入文件的惯用/推荐方法是什么?
答案 0 :(得分:3)
选项3:在生成行时写入行。
写入已经缓冲;您不必像在选项1和2中那样手动执行此操作。
答案 1 :(得分:2)
选项#3通常是最好的;普通文件对象是缓冲的,所以当你收到要写入的数据时,你不会通过写入来执行过多的系统调用。
或者,您可以混合选项#2和#3;不要构建中间列表并在其上调用.writelines
,使生成所述列表的代码成为生成器函数(具有yield
值)或生成器表达式,并将其传递给.writelines
。它在大多数情况下在功能上等同于#3,但它推动了将生成器迭代到C层的工作,从而消除了大量的Python字节码处理开销。但是,在文件I / O成本的上下文中它通常没有意义。