Pythonic方式将大量行写入文件

时间:2015-10-28 03:24:23

标签: python file-writing

我需要使用Python脚本自动生成一个有点大的Makefile。线数预计相对较大。写入文件的例程由嵌套循环,一大堆条件等组成。

我的选择:

  1. 以空字符串开头并继续向其添加行,最后使用file.write将大字符串写入文件(pro:只有单个写操作,con:巨大的字符串将占用内存)

  2. 从一个空列表开始并继续向其添加行,最后使用file.writelines(专业:单写操作(?),con:巨大的列表占用内存)

  3. 在构造文件时将每一行写入文件(专业:不消耗大量内存,con:大量写入操作)

  4. 将大量行写入文件的惯用/推荐方法是什么?

2 个答案:

答案 0 :(得分:3)

选项3:在生成行时写入行。

写入已经缓冲;您不必像在选项1和2中那样手动执行此操作。

答案 1 :(得分:2)

选项#3通常是最好的;普通文件对象是缓冲的,所以当你收到要写入的数据时,你不会通过写入来执行过多的系统调用。

或者,您可以混合选项#2和#3;不要构建中间列表并在其上调用.writelines,使生成所述列表的代码成为生成器函数(具有yield值)或生成器表达式,并将其传递给.writelines。它在大多数情况下在功能上等同于#3,但它推动了将生成器迭代到C层的工作,从而消除了大量的Python字节码处理开销。但是,在文件I / O成本的上下文中它通常没有意义。