在下面的代码中,我将创建一个临时文件,然后将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())
答案 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
,您将把整个文件读入内存。