为什么我们需要在变量中保存一个文件对象?
Why do we need to hold a file object inside a variable?
url = 'learn.txt'
variable1 = open(url, 'w')
writethis = variable1.write('Oh hey!')
writethis
variable1.close
好的,如果可行,那为什么不行:
url = 'learn.txt'
open(url, 'w').write('Oh hey!')
open(url, 'w').close
我正在使用 Python 版本 3.4.2
没有错误,但文本文件为空..
我尝试了这个快捷方式,因为它看起来是一样的,只是没有为函数分配变量。我考虑过接受一切都必须以某种方式完成的事实,但我的好奇心是压倒性的。
第二个例子有问题的原因是
x = open(url, "w")
y = open(url, "w")
x is y
产生错误。这意味着两者打开了return个没有任何关系的类文件对象。当你
open(url, 'w').write('Oh hey!')
这实际上没问题,在 正常 退出时,打开的文件将被刷新并关闭。接下来是
open(url, 'w').close()
首先无法关闭第一个示例行中的文件对象,其次以 'w' 模式打开现有文件将首先将其截断为零长度。该片段将落在末尾,刷新并关闭每个文件对象,但基础文件 (url) 已被截断为零长度。
你的第一个例子是正确的,比第二个更常见;正如您所注意到的,第二个是致命的缺陷。更惯用也更安全的是:
with open(url, 'w') as out_file:
outfile.write('Oh hey!\n')
# other stuff you might want to write to out_file
上下文管理器 (with) 确保 out_file 被刷新和关闭,即使在其主体中引发异常也是如此。
此答案基于以下假设:您调用 close 时有错别字,实际上应该 .close()
加括号。
url = 'learn.txt'
variable1 = open(url, 'w')
writethis = variable1.write('Oh hey!')
writethis
variable1.close
好的,如果可行,那为什么不行:
url = 'learn.txt'
open(url, 'w').write('Oh hey!')
open(url, 'w').close
我正在使用 Python 版本 3.4.2
没有错误,但文本文件为空..
我尝试了这个快捷方式,因为它看起来是一样的,只是没有为函数分配变量。我考虑过接受一切都必须以某种方式完成的事实,但我的好奇心是压倒性的。
第二个例子有问题的原因是
x = open(url, "w")
y = open(url, "w")
x is y
产生错误。这意味着两者打开了return个没有任何关系的类文件对象。当你
open(url, 'w').write('Oh hey!')
这实际上没问题,在 正常 退出时,打开的文件将被刷新并关闭。接下来是
open(url, 'w').close()
首先无法关闭第一个示例行中的文件对象,其次以 'w' 模式打开现有文件将首先将其截断为零长度。该片段将落在末尾,刷新并关闭每个文件对象,但基础文件 (url) 已被截断为零长度。
你的第一个例子是正确的,比第二个更常见;正如您所注意到的,第二个是致命的缺陷。更惯用也更安全的是:
with open(url, 'w') as out_file:
outfile.write('Oh hey!\n')
# other stuff you might want to write to out_file
上下文管理器 (with) 确保 out_file 被刷新和关闭,即使在其主体中引发异常也是如此。
此答案基于以下假设:您调用 close 时有错别字,实际上应该 .close()
加括号。