将大量行写入文件的Pythonic方法
我需要使用Python脚本自动生成一个较大的Makefile。预计线路数量将相对较大。写入文件的例程由嵌套循环、一系列条件等组成 我的选择:将大量行写入文件的Pythonic方法,python,file-writing,Python,File Writing,我需要使用Python脚本自动生成一个较大的Makefile。预计线路数量将相对较大。写入文件的例程由嵌套循环、一系列条件等组成 我的选择: 从一个空字符串开始,并继续向其追加行,最后使用file.write将大字符串写入文件(赞成:仅执行一次写入操作,反对:大字符串将占用内存) 从一个空列表开始,并继续向其追加行,最后使用file.writelines(赞成:单写操作(?),反对:庞大的列表占用内存) 在构建文件时将每一行写入文件(赞成:不消耗大量内存,反对:大量写入操作) 将大量行写入文件的
将大量行写入文件的惯用/推荐方法是什么?选项3:在生成行时写入行
写操作已经被缓冲;您不必像选项1和2那样手动执行此操作。选项3:在生成行时写入行 写操作已经被缓冲;您不必像选项1和2那样手动操作。选项3通常是最好的;普通文件对象是缓冲的,所以在接收要写入的数据时,您不会通过写入来执行过多的系统调用 或者,您可以将选项#2和#3混合使用;不要构建中间列表并在其上调用
.writelines
,将生成所述列表的代码作为生成器函数(让它在运行时产生值)或生成器表达式,并将其传递给.writelines
。在大多数情况下,它在功能上相当于#3,但它将生成器的迭代工作推到了C层,从而消除了大量Python字节码处理开销。但是,在文件I/O成本方面,它通常没有意义。选项3通常是最好的;普通文件对象是缓冲的,所以在接收要写入的数据时,您不会通过写入来执行过多的系统调用
或者,您可以将选项#2和#3混合使用;不要构建中间列表并在其上调用.writelines
,将生成所述列表的代码作为生成器函数(让它在运行时产生值)或生成器表达式,并将其传递给.writelines
。在大多数情况下,它在功能上相当于#3,但它将生成器的迭代工作推到了C层,从而消除了大量Python字节码处理开销。不过,在文件I/O成本方面,这通常毫无意义。Option#3——您在文件系统上写入文件,不像是数据库写入。Option#3——您在文件系统上写入文件,不像是数据库写入。应该在发布前搜索。这篇文章似乎也同意我写的句子是我生成的。应该在发布前搜索。这篇文章似乎也同意我写的句子是我生成的。