Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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 如何关闭使用ast.literal\u eval打开的文件?_Python_File - Fatal编程技术网

Python 如何关闭使用ast.literal\u eval打开的文件?

Python 如何关闭使用ast.literal\u eval打开的文件?,python,file,Python,File,我的程序使用了很多外部文件。大多数情况下,这些文件只包含一个字典。目前,我正在打开如下文件: userdata = ast.literal_eval(open("./users.txt", "r").read()) open("./users.txt", "w").write(str(userdata)) 这将字典保存到变量userdata中。现在,我可以稍微更改这些值,然后像这样重新编写字典: userdata = ast.literal_eval(open("./users.txt",

我的程序使用了很多外部文件。大多数情况下,这些文件只包含一个字典。目前,我正在打开如下文件:

userdata = ast.literal_eval(open("./users.txt", "r").read())
open("./users.txt", "w").write(str(userdata))
这将字典保存到变量userdata中。现在,我可以稍微更改这些值,然后像这样重新编写字典:

userdata = ast.literal_eval(open("./users.txt", "r").read())
open("./users.txt", "w").write(str(userdata))
显然,我不能用
userdata.close关闭文件,因为userdata不是一个文件对象,而只是一个字典。如何关闭这些文件或它们是否自行关闭

该文件可以汇总为只包含以下字符串:
{'name':'User1','money':50}

(实际上会有多个用户和多个键)

使用上下文管理器功能打开文件,即带有
关键字的
。这样可以确保在上下文管理器的作用域结束时始终关闭文件

阅读时请使用:

with open("./users.txt", "r") as f:
    userdata = ast.literal_eval(f.read())
with open("./users.txt", "w") as f:
    f.write(str(userdata))
并使用以下方法编写:

with open("./users.txt", "r") as f:
    userdata = ast.literal_eval(f.read())
with open("./users.txt", "w") as f:
    f.write(str(userdata))

使用上下文管理器功能打开文件,即带有
关键字的
。这样可以确保在上下文管理器的作用域结束时始终关闭文件

阅读时请使用:

with open("./users.txt", "r") as f:
    userdata = ast.literal_eval(f.read())
with open("./users.txt", "w") as f:
    f.write(str(userdata))
并使用以下方法编写:

with open("./users.txt", "r") as f:
    userdata = ast.literal_eval(f.read())
with open("./users.txt", "w") as f:
    f.write(str(userdata))

为什么不在
literal\u eval
之前调用
open
,这样您就可以访问文件对象了?和/或将对
literal\u eval
的调用用
包装起来。您能提供一个示例吗?你的意思是带ast.literal的
userdata=open(“./users.txt”,“r”)和ast.literal\u eval
No.
f=open(…);userdata=ast.literal_eval(f.read());f、 close()
,或者理想情况下,答案中显示的
的方式。为什么不在
文本评估之前调用
打开
,这样您就可以访问文件对象了?和/或将对
literal\u eval
的调用用
包装起来。您能提供一个示例吗?你的意思是带ast.literal的
userdata=open(“./users.txt”,“r”)和ast.literal\u eval
No.
f=open(…);userdata=ast.literal_eval(f.read());f、 close()
,或者,理想情况下,使用答案中显示的
的方式。