我在python中,有很多方法可以访问文件。
方法1:
fp = open("hello.txt", "w")
fp.write("No no no");
fp.close()
fp = open("hello.txt", "r")
print fp.read()
fp.close()
方法2:
open("hello.txt", "w").write("hello world!")
print open("hello.txt", "r").read()
方法3:
with open("hello.txt","w") as f:
f.write("Yes yes yes")
with open("hello.txt") as f:
print f.read()
使用这些中的每一个都有特定的优势吗?
我知道的东西:
答案 0 :(得分:10)
您应该使用第三种方法。
编程中有一种常见的模式,即使用您设置的某个对象,运行代码并再次将其拆除。文件句柄就是一个例子:您必须打开文件,运行代码,然后关闭文件。这最后一个不是可选的 - 操作系统知道你已经完成了它,并且Python要从IO缓冲区中清除所有数据,这一点很重要。
现在,CPython是一种引用计数语言。这意味着它计算了多少代码“了解”给定对象,因此当该计数变为零时,它可以清理所述对象并在内存中重用其空间。在方法2中,文件对象的引用计数变为零,这允许Python清理它。文件对象的清理方法也会关闭它们。但是,您通常不应该依赖于此 - 引用计数是Python标准版本的实现细节,并且无法保证您用于运行程序的任何内容都将执行相同操作。这就是你不应该使用方法2的原因。
方法1更好,因为您明确关闭了文件 - 只要您到达 .close()
函数调用!如果在该代码块的中间抛出异常,则不会到达close
,并且不会显式关闭该文件。所以你应该将中间代码包装在try... finally
块中。
方法3因此最好:您使用with
语句 - 将.close
封闭在finally
块中的惯用方法 - 关闭文件,这样您就不会我不得不担心try... except
的额外语法松散。
答案 1 :(得分:1)
我会使用这种method 3
的扩展版本:
with open("hello.txt","w+") as f:
f.write("Yes yes yes")
f.seek(0) #places the cursor back to the start of the file
print f.read() #now read the file
优点:
- 仅打开文件一次
- w +模式允许对同一文件对象进行读写操作
- 醇>
with
负责关闭文件
答案 2 :(得分:0)
我认为最好采用方法一,因为它是明确的,你可以用try
和except block
或方法3