open() 函数

函数定义是:open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

打开文件 file 并返回一个文本对象,如果文件无法被打开(被占用、文件不存在)会引发 OSError

参数介绍:

文件对象特殊用法

打开的文件对象支持上下文管理器,因为文件对象定义了 __enter____exit__ 方法:

打开的文件对象支持遍历(用于读取模式),因为定义了 __iter____next__ 方法:

文件对象介绍

我们在 open() 函数调用之后,得到的对象是一个 io.TextIOWrapper 对象,这个对象继承自 io.TextIOBase ,而这个 io.TextIOBase 又继承自 io.IOBase 。他们之间的继承关系可以表示为 io.IOBase -> io.TextIOBase -> io.TextIOWrapper 。下文中将从最基础的基类 io.IOBase 来一步一步讲解到 io.TextIOWrapper

io.IOBase

这个对象是 python 所有 IO 方式的基类,是一切 IO 操作的基础。这个类的默认实现是用这个类的对象来代表一个无法读取、写入、查找的文件,籍此以支持用户通过选择性的重写里面的默认方法,来自由定义 io.IOBase 对象的行为。

IOBase 支持迭代,因为其定义了 __next__ 方法和 __iter__IOBase 还支持上下文管理器,也就是 with 关键字:

常用方法:

io.TextIOBase

文本 IO 的基类,用于派生出所有的文本 IO 类及对象。继承自 io.IOBase 。在这个类里面重写并且额外新增了很多方法,下面将会对常用的属性和方法进行介绍。下面只介绍有别于父类的部分。

常用属性:

常用方法:

io.TextIOWrapper

一个高级的文本缓冲输入输出流,是 open() 函数返回值的对象类型。

encoding 给出将被用于编码或解码流的编码格式。 该参数值默认为 locale.getencoding()。 可以使用 encoding="locale" 来显式地指定当前语言区域的编码格式。

newline 控制行结束符处理方式。 它可以为 None, '', '\n', '\r''\r\n'。 其工作原理如下: