• io:轻松地创建缓存


    介绍

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

    StringIO

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

    BytesIO

     
    既然有StringIO,那么肯定也会有BytesIO,用法是一样的
    python
    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

     
    将一个字节流对象包装成一个文本对象
    python
    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进行包装的话,那么打开的方式一定要是二进制的方式

    python
    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")

    数据的压缩

    python
    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"))  # 这是一段长文本,我需要进行压缩,不然我存不下去啊
    

     

  • 相关阅读:
    Spring整合hessian和burlap及自带的Invoker
    Spring 企业级开发应用远程服务原理和实现机制
    RMI
    并行开发 —— 第七篇 简要分析任务与线程池
    并行开发 —— 第二篇 Task的使用
    并行开发 —— 第六篇 异步编程模型
    网络编程——第三篇 HTTP应用编程(下)
    并行开发 —— 第四篇 同步机制(上)
    网络编程——第二篇 HTTP应用编程(上)
    并行开发 —— 第一篇 Parallel的使用
  • 原文地址:https://www.cnblogs.com/valorchang/p/11395485.html
Copyright © 2020-2023  润新知