我正在打开一个csv文件:
def get_file(start_file): #opens original file, reads it to array
with open(start_file,'rb') as f:
data=list(csv.reader(f))
header=data[0]
counter=collections.defaultdict(int)
for row in data:
counter[row[10]]+=1
return (data,counter,header)
Run Code Online (Sandbox Code Playgroud)
如果我退出WITH循环内的程序,文件是否保留在内存中?
当我退出程序而不设置所有变量时,程序内部的变量会发生什么NULL?
当进程终止时,操作系统将自动关闭所有打开的文件描述符.
存储在内存中的文件数据(例如变量,Python缓冲区)将丢失.当文件被隐式关闭时,操作系统中缓冲的数据可能被刷新到磁盘(检查内核脏缓冲区的确切语义在这里是有教育意义的,尽管你不应该依赖它).
当您的流程终止时,您的变量将不复存在.
我对该with陈述的理解是,无论如何,当你退出它的范围时,它将负责关闭你的文件句柄.如果你的程序在with块中退出,那么仍然会发生这种情况.
就其他变量而言,当程序自动退出时,它们将从内存中删除.如果您有兴趣找到在运行之间保持持久性的方法,您可以查看pickle(http://docs.python.org/library/pickle.html)或搁置(http://docs.python.org/library /shelve.html)模块.就我个人而言,我更喜欢搁置来腌制,但它们都很适合.
@gotgenes - 感谢您的建议.值得注意的是,shelve在其底层实现中使用了pickle.当我说我更喜欢搁置腌制时,我的意思是,对于我目前使用搁架设计的持久性很重要的方式更容易,因为除了作为在运行之间持续存在的字典之外,它没有做任何其他事情.