【问题标题】:Pythonic way to write a large number of lines to a file将大量行写入文件的 Pythonic 方式
【发布时间】:2015-10-28 03:24:22
【问题描述】:

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

我的选择:

  1. 从一个空字符串开始,不断向其追加行,最后使用 file.write 将大字符串写入文件(赞成:仅单次写入操作,反对:大字符串会占用内存)

  2. 从一个空列表开始,不断向其追加行,最后使用 file.writelines(赞成:单写操作(?),反对:巨大的列表占用内存)

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

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

【问题讨论】:

  • 选项 #3 -- 你正在写入文件系统上的文件,这不像是数据库写入。

标签: python file-writing


【解决方案1】:

选项 3:在生成行时编写它们。

写入已被缓冲;您不必像选项 1 和 2 那样手动操作。

【讨论】:

【解决方案2】:

选项#3 通常是最好的;普通文件对象被缓冲,因此您在接收要写入的数据时不会通过写入来执行过多的系统调用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2011-03-09
    • 2014-01-19
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多