Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在内存中保存数据?(ram)_Python_File_Memory_Save - Fatal编程技术网

Python在内存中保存数据?(ram)

Python在内存中保存数据?(ram),python,file,memory,save,Python,File,Memory,Save,我是Python新手,但直到现在我才知道这一点。 我在for循环中有一个基本程序,它从站点请求数据并将其保存到文本文件中 但是当我检查任务管理器内部时,我发现内存使用只会增加?这对我来说可能是一个问题,当运行这个很长时间。 这是Python的标准做法还是可以更改? 下面是一个程序的基本内容 savefile = open("file.txt", "r+") for i in savefile: #My code goes here savefile.write(i) #end

我是Python新手,但直到现在我才知道这一点。 我在for循环中有一个基本程序,它从站点请求数据并将其保存到文本文件中 但是当我检查任务管理器内部时,我发现内存使用只会增加?这对我来说可能是一个问题,当运行这个很长时间。 这是Python的标准做法还是可以更改? 下面是一个程序的基本内容

savefile = open("file.txt", "r+")
for i in savefile:
     #My code goes here
     savefile.write(i)
#end of loop
savefile.close()

Python在调用
.close()
.flush()
或达到指定的缓冲区大小之前不会写入文件。这个问题可能会帮助您:

正如@Almog所说,Python不会立即写入文件。因此,在使用
savefile.close()
,刷新内部缓冲区并将所有内容写入文件之前,写入文件的每一行都会存储到RAM中。这可以解释额外的内存使用

尝试将循环更改为:

savefile = open('file.txt', 'r+')
for i in savefile:
    savefile.write(i)
    savefile.flush() #flushes buffer, saving RAM
savefile.close()

对于这一点,有一个更好的解决方案,以pythonic的方式:

打开(“your_file.txt”,“write_mode”)作为文件变量名称:
对于文件名中的行:
文件名。写入(行)
文件名.flush()

这段代码为每一行刷新文件,在执行之后,由于with语句,它关闭了文件

啊,太好了,我刚刚检查了它,它的大小为18MB,因此我认为这是为什么。我会查一查的,谢谢你,先生!请注意,要将其刷新到实际磁盘,您可能还需要调用
os.fysnc()
很好的示例,我喜欢它,它看起来稳定在18mb,所以没什么大不了的。我不明白为什么会有缓冲区,这是因为ram比hdd快得多,所以它可以一次写入所有内容,而不是一个接一个地写入。或者是因为某些文件运行速度非常快,从而使硬盘无法跟上程序的速度?@Uber-每次添加一行代码时都写入磁盘是非常低效的。总的来说,电脑最好等着把所有的东西都写下来。是的,我查过了。我会保持原样,因为它不会超过18.5mb。谢谢你的帮助!