io
文件对象 流 文件类对象
要注意不同的io所能处理的不同类型
概览
text io,处理的是str,即使后端是二进制格式的,仍可自动进行编码转换,同时进行平台特定换行符的处理, 通过open获得,通过创建StringIO获得,相关api在TextIOBase中
binary io,处理的是bytes,不管编码转换和换行符的处理,通过open时指定b模式,通过创建BytesIO获得,相关api在BufferedIOBase中
raw io,未buffer的io,一般作为底层使用,很少直接使用,open时指定b同时设置buffering为0,相关api在RawIOBase中
io.open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
就是默认的open
类的层次,抽象基类到具体的类
IOBase
fileno
, seek
, 和 truncate
close
, closed
, __enter__
, __exit__
, flush
, isatty
, __iter__
, __next__
, readable
, readline
, readlines
, seekable
, tell
, writable
, writelines
RawIOBase(IOBase)
处理读写字节,而FileIO(RawIOBase)提供了到文件系统的接口
readinto
和 write
read
, 和 readall
BufferedIOBase(IOBase)
处理在二进制流上的缓存机制,他的子类BufferedReader,BufferedWriter,BufferedRandom,BytesIO
detach
, read
, read1
, write
readinto
, readinto1
TextIOBase(IOBase)
处理文本型数据,处理编码相关的问题,子类为TextIOWrapper处理在BufferedIOBase上的文本接口,StringIO
detach
, read
, readline
, write
encoding
, errors
, newlines
各种类
IOBase代表一个文件不能read write seek,可以使用with语句,可以迭代
RawIOBase原生二进制
BufferedIOBase缓存过的二进制,一个典型的BufferedIOBase的实现是不从RawIOBase继承而是包含一个
1、FileIO
2、BytesIO BufferedReader BufferedWriter BufferedRandom BufferedRWPair
3、TextIOBase TextIOWrapper(buffer, encoding=None, errors=None, newline=None, line_buffering=False, write_through=False) StringIO(initial_value='', newline='\n')
性能
binary使用buffer的版本总是好一些
text读取二进制文件会慢
注意多线程的事项
二进制的buffer的不可重入