io

2020-12-02  本文已影响0人  xncode

文件对象 流 文件类对象
要注意不同的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)提供了到文件系统的接口

readintowrite

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的不可重入

上一篇下一篇

猜你喜欢

热点阅读