Python open or create file using with clause
我有以下代码,但如果文件不存在,它就不起作用:
1 2 3 4 5 6 7 8 9
| def log(self, action, data):
import json
with open('ReservationsManagerApp/logs/'+data['booking']+'.json', 'r+') as outfile:
log_data = {
'timestamp': str(datetime.today()),
'action': action,
'data': data
}
json.dump(log_data, outfile) |
我希望方法在不存在的情况下创建文件,但是我发现的所有示例都不能解释如何使用with子句创建文件,它们只使用try: open。如果文件不存在,如何指示with子句创建该文件?
- 你试过用w+代替r+吗?
- 您可以在try中紧挨着with,这是两个独立的、可组合的构造。但是,可能有一种模式允许您不必使用try-except。
- @如果存在,Matthieubrucher w+将截断。很可能,操作需要'a'模式,即"附加"
- 哦,是的,没错。无论如何,所有这些模式都很容易从打开的文档中检索到,也就是说,问题是无意义的,如果需要,open会创建文件。
- 供参考:docs.python.org/3/library/functions.html open
- @是的。我通常需要查找它们,我刚学会了w+截断的硬方法:)
您可以在a+模式(具有读取权限的附加模式)下打开文件,并执行文件查找到位置0,以便在文件不存在的情况下创建文件,但也允许从开始读取文件:
1 2
| with open('ReservationsManagerApp/logs/'+data['booking']+'.json', 'a+') as outfile:
outfile.seek(0) |
模式r+是读+写的,但如果需要,不会创建文件。我想你想要w+。这里的桌子不错。
- 评论中已经说过。
- @matthieubrucher:把答案写在评论中会破坏stackoverflow的目的。但是,如果您将答案移到"答案"部分,那么很高兴删除我的答案。
- 嗯,你的链接基本上不是说这是一个副本吗?所以这里不需要任何答案。
- 不。尽管相关,但该问题不会询问有关此用户正在寻找的"打开或创建"功能的任何问题。然而,其中一个答案确实包含一个有用的表。
- 这是你的意见。对于我和很多人来说,这是一个副本,因为OP想要创建一个文件。事实上,它在with条款中并不能改变原来的问题。
- 毫无疑问,我只是表达我的意见,如果我不清楚,对不起。目前,根据近票重复数,似乎只有一人认为是重复票。
- 显然,python标签的屏障要比更严格的标签低得多,因为它已经关闭了。所有这些都取决于我猜的问题数量。
- 当然,在你看来。…