本模块提供了面向不同I/O类型的处理功能,基本是三种类型:文本I/O,二进制I/O和原始I/O。面向操作这些I/O的对象封装叫做文件对象,或者文件类型对象。三种类型的操作函数对输入参数的要求是不一样的,比如文本的函数就不能输入二进制参数,二进制的函数就不能输入文本的参数,否则都会抛出异常。
文本I/O提供处理str字符串对象,要求输入的参数是字符串对象,返回的对象也是字符串对象。因此,文本模块封装了从文本转换到二进制的功能,包括对文本进行编码、解码等工作,对于使用者来说,不用关心这些处理过程,完全透明的。最简单的使用方式就是使用open()打开文件对象:
f = open("myfile.txt", "r", encoding="utf-8")
在这个函数里myfile.txt是文件名称,r是表示对文件进行读取,encoding是编码的参数,采用utf-8对二进制数据读取之后转换为字符串的解码方式。
在内存里操作的文本流也可以使用StringIO对象来表示:
f = io.StringIO("some initial text data")
二进制I/O,也被称为buffered I/O,它处理参数和返回的对象都基于bytes类型的对象。不用对数据进行编码、解码、以及换行符之类的操作。最方便打开一个二进制I/O操作的方式就是采用b方式打开文件:
f = open("myfile.jpg", "rb")
在这里,myfile.jpg是文件的名称,rb是表示对文件进行读取,按二进制的方式读取,然后返回二进制文件对象f。
内存里采用二进制I/O方式,可以使用BytesIO对象:
f = io.BytesIO(b"some initial binary data: \x00\x01")
原始I/O方式也叫做非缓存I/O方式,提供了最低层次的二进制或文本流的读写功能。创建这种方式最简单的方法是使用二进制的模式b打开,并且把缓冲区关闭,如下:
f = open("myfile.jpg", "rb", buffering=0)
io.DEFAULT_BUFFER_SIZE
I/O操作时默认数据缓冲区的大小。
io.open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
这个函数是内置函数open()的别名。
exception io.BlockingIOError
与内置异常BlockingIOError一样。
exception io.UnsupportedOperation
当调用一个流对象不支持的操作时抛出的异常。
蔡军生 QQ:9073204 深圳