file
和open
有什么区别?我应该在什么情况下使用哪个?(假设我使用的是2.5版本)这样做有两个原因:Python 哲学中的 "应该有一种方法来做" 和 file
即将消失。
file
是实际类型(例如使用 file('myfile.txt')
是调用它的构造函数)。open
是一个工厂函数,将返回一个文件对象。
在 Python 3.0 中,file
将从内置变成由 io
库中的多个类实现(类似于 Java 的缓冲读取器等)。
file()
是一种类型,就像int或list一样。 open()
是用于打开文件的函数,并且会返回一个file
对象。
这是您应该使用open的示例:
f = open(filename, 'r')
for line in f:
process(line)
f.close()
这是一个使用file时应该的例子:
class LoggingFile(file):
def write(self, data):
sys.stderr.write("Wrote %d bytes\n" % len(data))
super(LoggingFile, self).write(data)
正如您所看到的,两者都有充分的存在理由,并且都有明确的使用情境。
with
语句打开文件。 with open(filename, 'r') as f: \ for line in f: \ process(line)
,这可以避免显式关闭文件操作。Python 2.6及以上版本本地支持 with
语句。在 Python 2.5 中,您必须在代码顶部添加 from __future__ import with_statement
。 - IceArdorfile
类配备了特殊方法,每当通过with
语句打开文件时自动调用。这些特殊方法确保文件被正确和安全地打开和关闭。 - Mausy5043就功能而言,两者是相同的;open
无论如何都会调用 file
,因此目前的区别只是风格问题。Python文档 建议使用 open
。
打开文件时,最好使用
open()
而不是直接调用文件构造函数。
原因是在未来版本中,它们不能保证是相同的(open
将成为一个工厂函数,根据打开的路径返回不同类型的对象)。
只使用open()来打开文件。file()在3.0版本中被移除了,在当前版本中已经被弃用。它们之间有一种奇怪的关系,但是现在file()即将消失,所以不需要再担心了。
以下内容摘自Python 2.6文档。[方括号]是我添加的。
打开文件时,最好使用open()而不是直接调用这个[file()]构造函数。file更适合于类型测试(例如,写isinstance(f, file)
根据Van Rossum先生的说法,尽管open()目前是file()的别名,但应该使用open(),因为这在未来可能会发生变化。