Python的io模块详解

发布时间:2019-09-07 08:06:06编辑:auto阅读(1694)

    Python的io模块提供了多个流式处理接口,具体的处理函数实现位于_pyio.py模块中。
    _io.py模块中,提供了唯一的模块方法open(name, mode=None, buffering=None),但是没有read()方法。
    1. io模块的类图
    IOBase
    -RawIOBase,无缓存的字节流
    -+FileIO,操作系统文件流
    -BufferedIOBase,缓存的字节流
    -+BytesIO
    -+BufferedReader
    -+BufferedWriter
    -+BufferedRandom
    -+BufferedRWPair
    -TextIOBase,编码相关的文本流
    -+StringIO,文本的内存流
    -+TextIOWrapper


    2. io模块的3种I/O

    1) 原始I/O,即RawIOBase及其子类
    也被称为无缓存I/O。
    操作底层块,既可以用于文本I/O,也可以用于字节I/O。不推荐使用。
    f = open("myfile.jpg", "rb", buffering=0)


    2) 文本I/O,即TextIOBase及其子类

    读取一个str对象,得到一个str对象。
    f = open("myfile.txt", "r", encoding="utf-8")
    f = io.StringIO("some initial text data")


    3) 字节I/O,即BufferedIOBase及其子类

    也称为缓存I/O。

    读取一个bytes-like对象,得到一个bytes对象。
    f = open("myfile.jpg", "rb")
    f = io.BytesIO(b"some initial binary data: \x00\x01")


    3. io模块中的文本I/O之StringIO类

    文本I/O被读取后,就是在内存中的流。这样的内存流,在调用close()方法后释放内存缓冲区。

    • StringIO类参数
    initial_value='',缓冲区初始值
    newline='\n',换行符
    • StringIO类的额外的方法
    getvalue(),返回一个str,包含整个缓冲区的内容。类似于read(),但是位置指针不移动。
    • StringIO类的用法

    from io import StringIO
    output = StringIO()
    output.write('First line.\n')#写入第一行
    print('Second line.', file=output)#写入第二行
    contents = output.getvalue()
    output.close()
    

    参考链接

    https://docs.python.org/3/library/io.html

    https://github.com/python/cpython/blob/3.6/Lib/io.py

    https://github.com/python/cpython/blob/3.6/Lib/_pyio.py

关键字

上一篇: python 多cpu并行编程

下一篇: python画log图