zoukankan      html  css  js  c++  java
  • Python StringIO与BytesIO、类文件对象

    StringIO与BytesIO

    StringIO与BytesIO、类文件对象的用途,应用场景,优、缺点。

    StringIO

    StringIO 是io 模块中的类,在内存中开辟的一个文本模式的buffer,可以像文件对象一样操作它。当close 方法被调用的时候,这个buffer 会被释放。

    好处:一般来说,磁盘的操作比内存的操作要慢的多,内存足够的时候,一般的优化思路是少落地,减少磁盘IO的过程,可以大大提高程序的运行速度。业务中单机情况可以使用StringIo或者BytesIO,多机就考虑使用 redis。
    缺点:内存断电,buffer 中的数据会丢失,所以不建议存储很重要的数据,但可以存储日志之类的丢失也没有大影响的数据。


    直接导入:form io import StringIO 使用:StringIO()
    导入io 模块:import io 使用时调用StringIO方法:io.StringIO()

    readline() 逐行读取
    getvalue() 获取全部内容:

    In [53]: from io import StringIO
    
    In [54]: sio = StringIO()
    
    In [55]: print(sio.readable(),sio.writable(),sio.seekable())
    True True True
    
    In [56]: sio.write("hello
    Python")
    Out[56]: 12
    
    In [57]: sio.seek(0)
    Out[57]: 0
    
    In [58]: sio.readline() 
    Out[58]: 'hello
    '
    
    In [59]: sio.tell()   #读取一行后,文件指针移到了下行行首
    Out[59]: 6
    
    In [60]: sio.getvalue()  #不受文件指针影响,输出全部内容
    Out[60]: 'hello
    Python'
    
    In [61]: sio.close()
    

      

      

    BytesIO

    BytesIO 也是io模块中的类,内存中开辟的一个二进制模式的buffer,也可以像文件对象一样操作它,当close方法调用的时候,这个buffer也会被释放。

    简单使用方法与StringIO 一样:

    In [44]: from io import BytesIO
    
    In [45]: bio = BytesIO()
    
    In [46]: print(bio.readable(),bio.writable(),bio.seekable())
    True True True
    
    In [47]: bio.write(b'hello
    Python')
    Out[47]: 12
    
    In [48]: bio.seek(0)
    Out[48]: 0
    
    In [49]: bio.readline()
    Out[49]: b'hello
    '
    
    In [50]: bio.tell()
    Out[50]: 6
    
    In [51]: bio.getvalue()
    Out[51]: b'hello
    Python'
    
    In [52]: bio.close()
    

      

    file-like对象

    类文件对象,可以像文件对象一样操作
    socket对象、输入输出对象(stdin、stdout)都是类文件对象

    In [1]:  from sys import stdout
    
    In [2]: print(type(stdout))
    <class 'colorama.ansitowin32.StreamWrapper'>  #linux下可能是<class '_io.TextIOWrapper'>
    
    In [3]: stdout.write('hello
    Python
    ')  #控制台打印
    hello
    Python
    
    In [4]: stdout.close()
    

      

  • 相关阅读:
    【PHP】php基础回顾
    【PHP】MVC架构
    【OpenGL学习】使用VBO和FBO
    【OpenGL学习】使用Shader做图像处理
    hdu 杭电 1242 Rescue 果枫
    并查集模板 果枫
    数组结构体中排序 果枫
    hdu 杭电 1728 逃离迷宫 果枫
    hdu 杭电 1241 Oil Deposits 果枫
    hdu 杭电 2216 Game III 果枫
  • 原文地址:https://www.cnblogs.com/i-honey/p/7735939.html
Copyright © 2011-2022 走看看