Python:read()有更好的方法吗?

时间:2016-11-10 19:28:02

标签: python-2.7

在下面的代码中,我将创建一个临时文件,然后将txt文件的全部内容保存在此临时文件中。这只是一个例子。我知道读取文本文件然后将其写入临时文件是没有意义的。但我想证明我的问题。

当我使用read()方法时,这意味着临时文件的整个匹配都保存在RAM内存中,对吧?我无法控制临时文件的内容大小。所以我在考虑是否有更好的方法来保护RAM内存。我不想淹没RAM内存。

# Use the TemporaryFile context manager for easy clean-up
with tempfile.TemporaryFile(delete=True) as tmp:
    with open('filename.txt', 'r') as my_file:
        for line in my_file:
            tmp.write(line)

    tmp.seek(0)

    exec(tmp.read())

1 个答案:

答案 0 :(得分:1)

geocoder.on('result'调用does not buffer the entire file in memory when reading

的文件对象for line in my_file
  

为了使for循环成为最有效的循环方式   一个文件的行(一个非常常见的操作),next()方法使用一个   隐藏的预读缓冲区

来自docs

  

要从文件中读取行,可以循环遍历文件对象。这个   内存高效,快速,并导致简单的代码

对于.next功能,来自docs

  

当省略大小或为负时,文件的全部内容将会   阅读并归还;如果文件大两倍,这是你的问题   作为你机器的记忆。

因此,除非您在编写时按行阅读,或者tmp.read()以递增的固定量 read,您将把整个文件读入内存。