io

作者: xncode | 来源:发表于2020-12-02 10:38 被阅读0次

    文件对象 流 文件类对象
    要注意不同的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的不可重入

    相关文章

      网友评论

          本文标题:io

          本文链接:https://www.haomeiwen.com/subject/dvmswktx.html