zoukankan      html  css  js  c++  java
  • io:轻松地创建缓存

    介绍

    io模块是python中专门用来进行流处理的模块
    

    StringIO

    提供字符串形式的缓存,可以不断地往里面写入数据,最后一次性读出
    
    import io
    
    # 创建相应的缓存
    buf = io.StringIO()
    
    buf.write("我是谁?")
    # 写的内容是连接在一起的,不会自动换行,如果想要换行,需要加
    
    buf.write("我在哪?
    ")
    buf.write("谁在打我?")
    
    # 通过getvalue获取内容
    print(buf.getvalue())
    """
    我是谁?我在哪?
    谁在打我?
    """
    

    BytesIO

    既然有StringIO,那么肯定也会有BytesIO,用法是一样的
    
    import io
    
    # 创建相应的缓存
    buf = io.BytesIO()
    
    buf.write(bytes("我是谁?", encoding="utf-8"))
    buf.write(bytes("我在哪?
    ", encoding="utf-8"))
    buf.write(bytes("谁在打我?", encoding="utf-8"))
    
    # 通过getvalue获取内容
    data = buf.getvalue()
    print(data)
    """
    b'xe6x88x91xe6x98xafxe8xb0x81xefxbcx9fxe6x88x91xe5x9cxa8xe5x93xaaxefxbcx9f
    xe8xb0x81xe5x9cxa8xe6x89x93xe6x88x91xefxbcx9f'
    """
    
    print(str(data, encoding="utf-8"))
    """
    我是谁?我在哪?
    谁在打我?
    """
    

    TextIOWrapper

    将一个字节流对象包装成一个文本对象
    
    import io
    import gzip
    
    
    with gzip.open("1.tar.gz", "wb") as out:
        # 我想往里面写入文本,那么需要对其进行一个包装
        with io.TextIOWrapper(out, encoding="utf-8") as f:
            # 这里的f和我们使用open函数得到的f是类似的
            f.write("我要写入文件了")
    
    
    # 读取文件
    with gzip.open("1.tar.gz", "rb") as out:
        with io.TextIOWrapper(out, encoding="utf-8") as f:
            print(f.read())  # 我要写入文件了
    
    import os
    os.remove("1.tar.gz")
    

    当然这里换成open也是可以的,主要就是对字节流的文本对象进行一个包装,从而可以写入字符串。记住如果要想使用io.TextIOWrapper进行包装的话,那么打开的方式一定要是二进制的方式

    import io
    import gzip
    
    
    with open("1.png", "wb") as out:
        with io.TextIOWrapper(out, encoding="utf-8") as f:
            f.write("这是一张图片")
    
    
    # 读取文件
    with open("1.png", "rb") as out:
        with io.TextIOWrapper(out, encoding="utf-8") as f:
            print(f.read())  # 这是一张图片
    
    import os
    os.remove("1.png")
    

    数据的压缩

    import io
    import gzip
    
    
    text = "这是一段长文本,我需要进行压缩,不然我存不下去啊"
    buf = io.BytesIO()
    
    # 使用gzip.GzipFile进行压缩。只需要指定mode:压缩还是解压,fileobj:压缩到什么地方还是从什么地方解压,即可
    # 当然还可以指定压缩等级,范围是0-9,默认是9,值越大计算越慢,但是压缩程度越高
    with gzip.GzipFile(mode="wb", fileobj=buf, compresslevel=9) as out:
        # 直接写入就可以了(需要转化为字节),会自动将写入的内容进行压缩,写到fileobj里面去。
        out.write(bytes(text, encoding="utf-8"))
    
    
    # 怎么把写进去的东西获取出来了
    with gzip.GzipFile(mode="rb", fileobj=io.BytesIO(buf.getvalue())) as out:
        # 将mode改成rb,将内容再次放到BytesIO里面,然后调用out.read方法
        # 会自动的将读出的内容进行解压缩。
        print(str(out.read(), encoding="utf-8"))  # 这是一段长文本,我需要进行压缩,不然我存不下去啊
    
    
    
  • 相关阅读:
    poj2115
    poj2136
    软件的架构与设计模式之模式的种类
    SOA: My Understanding (转载未来技术方向)
    深度管理Remote Objects的生存期 (转载)
    SmartClient(智能客户端) 转载
    Windows Communication Foundation入门(Part One)
    使用.NET Remoting开发分布式应用——基于租约的生存期(转载)
    软件设计模式C#
    MarshalByRefObjects远程对象及其调用方法
  • 原文地址:https://www.cnblogs.com/traditional/p/11111345.html
Copyright © 2011-2022 走看看