写入文件的正确方法?

风车

我想知道这样做之间是否有任何区别:

var1 = open(filename, 'w').write("Hello world!")

并做:

var1 = open(filename, 'w')
var1.write("Hello world!")
var1.close()

我发现AttributeError如果close()使用第一种方法(全部在一行中)后尝试运行,则无需()。

我想知道一种方法实际上是否与另一种方法不同/“更好”,其次,Python在这里实际上在做什么?我知道这会open()返回一个文件对象,但是如何在一行中运行所有代码也会自动关闭该文件呢?

生物鸟人

让我向您举例说明一下,如果您初始化一个close()方法,为什么您的第一个实例将无法工作。这对于您将来尝试使用Python学习面向对象的编程很有用。

例子1

运行时open(filename, 'w'),它将初始化并返回文件句柄对象。

调用时open(filename, 'w').write('helloworld'),您正在对启动的文件对象调用write方法。由于write方法不返回任何值/对象,因此var1在上面的代码中NoneType

例子2

现在在第二个示例中,您将文件对象存储为var1

var1将具有该write方法以及该close方法,因此它将起作用。

这与您在第一个示例中所做的相反。

falsetru提供了一个很好的示例,说明如何使用with语句读取和写入文件

使用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语句会自动为您执行此操作。使用tryandfinally语句可以确保在for循环中是否引发任何期望/错误,文件将被关闭。

来源:Python内置文档

官方文件

使用with语句,完成时将自动调用f.close()。https://docs.python.org/2/tutorial/inputoutput.html

开心地冒险进入python

干杯,生物鸟人

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用delphi写入大文件的正确方法是什么

来自分类Dev

在csv / xlsx文件中写入图像的正确方法是什么?

来自分类Dev

XMLEncoder不能正确写入文件

来自分类Dev

Java未正确写入文件

来自分类Dev

从void方法写入文件

来自分类Dev

将“ Vec <u16>”内容写入文件的正确方法是什么?

来自分类Dev

在 Python 中写入和读取数据帧到文件的正确方法

来自分类Dev

将此写入文件的正确语法是什么?

来自分类Dev

PHP脚本无法正确写入文件

来自分类Dev

恢复不正确写入USB的文件?

来自分类Dev

Shell脚本输出未正确写入文件

来自分类Dev

FileOutputStream无法正确写入非.txt文件

来自分类Dev

文件没有写入正确的分区

来自分类Dev

列表未正确写入 CSV 文件

来自分类Dev

Ruby 文件存储写入不正确

来自分类Dev

Netlogo 未将结果正确写入文件

来自分类Dev

写入用户无效行为的正确方法

来自分类Dev

在方法之间读取/写入文件

来自分类Dev

写入大量文件的最佳方法

来自分类Dev

计算何时多次写入文件会导致不正确?

来自分类Dev

正确将std :: string写入二进制文件

来自分类Dev

Networkx无法使用write_adjlist正确写入文件

来自分类Dev

确保所有字节均正确写入文件

来自分类Dev

写入文件和循环(循环执行不正确)

来自分类Dev

如何同时从多个python线程正确写入日志文件?

来自分类Dev

Python制表未正确写入文本文件

来自分类Dev

PHP函数无法正确写入文件,遗漏了选择字段

来自分类Dev

Networkx无法使用write_adjlist正确写入文件

来自分类Dev

cron作业未将输出正确写入输出日志文件