我想知道这样做之间是否有任何区别:
var1 = open(filename, 'w').write("Hello world!")
并做:
var1 = open(filename, 'w')
var1.write("Hello world!")
var1.close()
我发现AttributeError
如果close()
使用第一种方法(全部在一行中)后尝试运行,则无需()。
我想知道一种方法实际上是否与另一种方法不同/“更好”,其次,Python在这里实际上在做什么?我知道这会open()
返回一个文件对象,但是如何在一行中运行所有代码也会自动关闭该文件呢?
让我向您举例说明一下,如果您初始化一个close()方法,为什么您的第一个实例将无法工作。这对于您将来尝试使用Python学习面向对象的编程很有用。
运行时open(filename, 'w')
,它将初始化并返回文件句柄对象。
调用时open(filename, 'w').write('helloworld')
,您正在对启动的文件对象调用write方法。由于write方法不返回任何值/对象,因此var1
在上面的代码中NoneType
现在在第二个示例中,您将文件对象存储为var1
。
var1
将具有该write
方法以及该close
方法,因此它将起作用。
这与您在第一个示例中所做的相反。
falsetru提供了一个很好的示例,说明如何使用with语句读取和写入文件
with open(filename, 'w') as f:
f.write("helloworld")
with open(filename) as f:
for line in f:
## do your stuff here
您好,这是您对评论的问题的更新。不太确定这是否是最pythonic的方式。但是,如果您想使用with语句通过with语句同时读取/写入多个文件。您可以做的是将with语句彼此嵌套
例如 :
with open('a.txt', 'r') as a:
with open('b.txt', 'w') as b:
for line in a:
b.write(line)
文件对象本身是一个迭代器。因此,您可以使用for
循环遍历文件。文件对象包含next()
方法,每次迭代都会调用该方法,直到到达文件末尾为止。
该with
语句是在python 2.5中引入的。在python 2.5之前,要达到相同的效果,必须
f = open("hello.txt")
try:
for line in f:
print line,
finally:
f.close()
现在,该with
语句会自动为您执行此操作。使用try
andfinally
语句可以确保在for循环中是否引发任何期望/错误,文件将被关闭。
来源:Python内置文档
使用with语句,完成时将自动调用f.close()。https://docs.python.org/2/tutorial/inputoutput.html
开心地冒险进入python
干杯,生物鸟人
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句