Python - 何时使用文件vs打开

Gre*_*reg 137 python file

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

nos*_*klo 152

你应该经常使用open().

正如文件所述:

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

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

  • 这很令人痛苦,因为用于声明"文件()构造函数的文档是Python 2.2中的新内容.之前的拼写open()保留了兼容性,并且是file()的别名." 自从十年前我决定使用RTFM,并且非常喜欢类型和类的统一,我再也没用过open().此外,我仍然觉得类型构造函数是返回像object这样的文件的更明显的方法,它由路径arg定位,并且在模式arg中按照请求运行.我特别感觉这种方式,当时开发人员的明显意图是2保留open4compat. (23认同)

Rya*_*yan 32

有两个原因:蟒蛇哲学"应该有一种方法去做"并且file正在消失.

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

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

  • 有两个原因吗? (2认同)

Jer*_*rub 19

file()是一个类型,如int或列表.open()是一个用于打开文件的函数,它将返回一个file对象.

这是一个应该使用open的示例:

f = open(filename, 'r')
for line in f:
    process(line)
f.close()
Run Code Online (Sandbox Code Playgroud)

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

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

正如您所看到的,存在这两者的充分理由,以及两者的明确用例.

  • 通常,应使用`with`语句打开文件.`用open(文件名,'r')作为f:\用于f:\ process(line)中的行.这避免了明确的关闭.Python 2.6及更高版本本身支持`with`语句.在Python 2.5中,您必须将`from __future__ import with_statement`添加到代码的顶部. (5认同)

dF.*_*dF. 7

在功能上,两者是相同的; 无论如何open都会打电话file,所以目前差异是风格问题.在Python文档建议使用open.

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

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

  • open已经是一个工厂函数,因此存在功能差异(例如,继承,isinstance()等) (2认同)