140

filePython和Python有什么区别open?我什么时候应该使用哪一个?(假设我在 2.5 中)

4

6 回答 6

155

您应该始终使用open().

正如文档所述:

打开文件时,最好使用 open() 而不是直接调用此构造函数。file 更适合类型测试(例如,编写“isinstance(f, file)”)。

此外,自 Python 3.0 以来file() 已被删除。

于 2008-09-22T03:07:44.503 回答
33

两个原因:“应该有一种方法来做到这一点”的 python 哲学file正在消失。

file是实际类型(使用 egfile('myfile.txt')正在调用其构造函数)。open是一个工厂函数,它将返回一个文件对象。

在 python 3.0file中,将从内置转变为由io库中的多个类实现(有点类似于带有缓冲读取器的 Java 等)

于 2008-09-22T03:10:16.290 回答
19

file()是一种类型,如 int 或列表。open()是一个打开文件的函数,会返回一个file对象。

这是何时应该使用 open 的示例:

f = open(filename, 'r')
for line in f:
    process(line)
f.close()

这是何时应该使用文件的示例:

class LoggingFile(file):
    def write(self, data):
        sys.stderr.write("Wrote %d bytes\n" % len(data))
        super(LoggingFile, self).write(data)

如您所见,两者存在都有充分的理由,并且两者都有明确的用例。

于 2008-09-22T03:32:08.860 回答
7

功能上,两者是一样的;open无论如何都会打电话file,所以目前的区别是风格问题。Python 文档建议使用open.

打开文件时,最好使用 open() 而不是直接调用文件构造函数。

原因是在未来的版本中它们不能保证是相同的(open将成为一个工厂函数,它根据打开的路径返回不同类型的对象)。

于 2008-09-22T03:08:37.747 回答
4

只使用 open() 打开文件。file() 实际上在 3.0 中已被删除,目前已弃用。他们有一种奇怪的关系,但是 file() 现在正在运行,所以不必再担心了。

以下来自 Python 2.6 文档。[括号的东西]由我添加。

打开文件时,最好使用 open() 而不是直接调用此 [file()] 构造函数。file 更适合类型测试(例如,写 isinstance(f, file)

于 2008-09-22T03:10:45.183 回答
2

根据 Van Rossum 先生的说法,尽管 open() 目前是 file() 的别名,但您应该使用 open(),因为这在未来可能会改变。

于 2008-09-22T03:12:27.097 回答