将大量行写入文件的Pythonic方法

将大量行写入文件的Pythonic方法,python,file-writing,Python,File Writing,我需要使用Python脚本自动生成一个较大的Makefile。预计线路数量将相对较大。写入文件的例程由嵌套循环、一系列条件等组成 我的选择: 从一个空字符串开始,并继续向其追加行,最后使用file.write将大字符串写入文件(赞成:仅执行一次写入操作,反对:大字符串将占用内存) 从一个空列表开始,并继续向其追加行,最后使用file.writelines(赞成:单写操作(?),反对:庞大的列表占用内存) 在构建文件时将每一行写入文件(赞成:不消耗大量内存,反对:大量写入操作) 将大量行写入文件的

我需要使用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——您在文件系统上写入文件,不像是数据库写入。应该在发布前搜索。这篇文章似乎也同意我写的句子是我生成的。应该在发布前搜索。这篇文章似乎也同意我写的句子是我生成的。