Python file() 和 open() 比较

Python file() 和 open() 比较

Jan 16, 2014
Coding
Python

本文内容适用于 python 2.x 版本

file() 和 open() 都是Python的内建函数(build-in function),都可以用来打开文件。

区别:推荐使用open()打开文件,使用file做类型测试(isinstance(f,file) )

Python 3.x版本中已经不支持使用file()打开文件

file()函数 #

file(name[, mode[, buffering]])

file 类型对象的构造函数(file类型具体见File Objects)。该构造函数与open() 函数的参数相同。当打开一个文件时,推荐使用open()函数,而不是直接调用file()构造函数。file更适合用来做类型测试,判断一个对象是不是文件类型,如 isinstance(f,file)

Open函数 #

open(name[, mode[, buffering]])

打开一个文件,返回file类型的对象(file 类型具体见 File Objects)。如果文件无法打开,则抛出 IOError 异常。当打开一个文件时,推荐使用 open() 取代直接调用 file 的构造函数(即,file() 函数)。

前两个参数与 stdio 中的 fopen() 函数相同:name 是要打开的文件名,mode 是一个字符串指示打开的模式。mode 最常用的值是 ‘r’ 表示 reading ,‘w’ 表示 writing(如果文件已存在,则截断,即清空),‘a’表示追加。如果mode省略则默认为’r’。默认使用文本模式(text mode),该模式下,在读写时自动将字符’\n’转换与平台相关的换行(Windows为\r\n,unix\linux为\n,mac为\r)。如果要打开二进制文件,在 mode 字符串后追加一个字母’b’,以二进制模式打开文件,这将提高可移植性。

可选的 buffering 参数指示文件需要的缓存大小:0表示无缓存(unbuffered),1表示行缓存(line buffered),其它任意正整数表示使用指定大小(单位:字节)的缓存,负数表示使用系统默认 – 通常是tty设备使用行缓存,其它文件使用全部缓存fully-buffered。参数省略,则使用系统默认。 ‘r+’, ‘w+’ 和 ‘a+’ 模式打开文件用以更新,即可读可写(注意’w+‘会截断文件)。在区分二进制文件和文本文件的系统上,追加’b’可以二进制模式打开文件,在不区分二进制和文本文件的系统上,追加’b’没有作用。

在标准的 fopen() 之外,mode 还可以是’U’ 或 ‘rU’,通常内建了universal newlines(通用换行)支持。提供了’U’ 以文本文件方式打开文件,但每一行会以下述任意一种方式结束:Unix中’\n’,Macintosh中’\r’,Windows中’\r\n’。所有这些表示都被Python程序视为’\n’。如果Python没有内建通用换行支持,‘U’会被当作普通的文本模式处理。注意:打开的文件还有一个属性newlines – 它的值为None(如果还没有发现newlines),或者值为’\n’,’\r’,’\r\n’,或者一个包含了所有已发现的newline类型的tuple。

Python中提供了许多文件处理模块:fileinput, os, os.path, tempfile, 和 shutil