Python – 何时使用文件vs打开

文件和Python打开有什么区别? 我应该什么时候使用哪一个? (说我在2.5)

你应该总是使用open()

正如文档所述:

当打开文件时,最好使用open()而不是直接调用这个构造函数。 文件更适合于typestesting(例如,编写“isinstance(f,file)”)。

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

原因有两个:“应该有一个办法做”的Python哲学, file正在消失。

file是实际的types(使用例如file('myfile.txt')正在调用它的构造函数)。 open是一个将返回文件对象的工厂函数。

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

file()是一个types,就像一个int或一个列表。 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) 

正如你所看到的,两者都有一个很好的理由存在,并且两者都有明确的用例。

在function上,两者是相同的。 open会调用file ,所以目前的差异是一个风格的问题。 Python文档build议使用open

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

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

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

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

打开文件时,最好使用open(),而不是直接调用这个[file()]构造函数。 文件更适合于typestesting(例如,写入isinstance(f,file)

据Van Rossum先生介绍,尽pipeopen()当前是file()的别名,但应该使用open(),因为这可能会在将来发生变化。