介绍

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

StringIO

提供字符串形式的缓存,可以不断地往里面写入数据,最后一次性读出
import io

# 创建相应的缓存
buf = io.StringIO() buf.write("我是谁?")
# 写的内容是连接在一起的,不会自动换行,如果想要换行,需要加\n
buf.write("我在哪?\n")
buf.write("谁在打我?") # 通过getvalue获取内容
print(buf.getvalue())
"""
我是谁?我在哪?
谁在打我?
"""

BytesIO

既然有StringIO,那么肯定也会有BytesIO,用法是一样的
import io

# 创建相应的缓存
buf = io.BytesIO() buf.write(bytes("我是谁?", encoding="utf-8"))
buf.write(bytes("我在哪?\n", encoding="utf-8"))
buf.write(bytes("谁在打我?", encoding="utf-8")) # 通过getvalue获取内容
data = buf.getvalue()
print(data)
"""
b'\xe6\x88\x91\xe6\x98\xaf\xe8\xb0\x81\xef\xbc\x9f\xe6\x88\x91\xe5\x9c\xa8\xe5\x93\xaa\xef\xbc\x9f\n\xe8\xb0\x81\xe5\x9c\xa8\xe6\x89\x93\xe6\x88\x91\xef\xbc\x9f'
""" 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")) # 这是一段长文本,我需要进行压缩,不然我存不下去啊

io:轻松地创建缓存的更多相关文章

  1. AppDir【创建缓存目录】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 创建缓存目录 public static String APP_CACHE = "";// /storage/e ...

  2. AppDir【创建缓存目录】【建议使用这个工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 创建缓存目录 public static String APP_CACHE = "";// /storage/e ...

  3. 加快ArcGIS Server创建缓存速度,CachingTools的实例数

    大比例尺的缓存,由于文件非常大,创建非常花费时间,在硬件设备已固定的情况下,调整Caching tools的实例数是加快创建缓存的方法之一. 简单来说:CachingTools的最大并行实例数决定了C ...

  4. 利用开机账户登录“轻松访问”创建Windows后门

    利用开机账户登录“轻松访问”创建Windows后门 实验原理: 利用登录账户界面的“轻松访问”中的“放大镜”,把它替换为cmd.exe程序,实现在不登录的情况下打开命令提示符,并进行一些操作(打开的c ...

  5. python 自动化之路 day 10 协程、异步IO、队列、缓存

    本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 RabbitMQ队列 Redis\Memcached缓存 Paramiko SSH Twsited网络框架 引子 到目 ...

  6. SQLite剖析之异步IO模式、共享缓存模式和解锁通知

    1.异步I/O模式    通常,当SQLite写一个数据库文件时,会等待,直到写操作完成,然后控制返回到调用程序.相比于CPU操作,写文件系统是非常耗时的,这是一个性能瓶颈.异步I/O后端是SQLit ...

  7. Tomcat系列(9)——Tomcat 6方面调优(内存,线程,IO,压缩,缓存,集群)

    核心部分 内存 线程 IO 压缩 缓存 集群 一.JVM内存优化 Tomcat内存优化,包括内存大小,垃圾回收策略. Windows 下的catalina.bat,Linux 下的catalina.s ...

  8. Python异步IO --- 轻松管理10k+并发连接

    前言   异步操作在计算机软硬件体系中是一个普遍概念,根源在于参与协作的各实体处理速度上有明显差异.软件开发中遇到的多数情况是CPU与IO的速度不匹配,所以异步IO存在于各种编程框架中,客户端比如浏览 ...

  9. 不带缓存IO和标准(带缓存)IO

    linux对IO文件的操作分为: 不带缓存:open read.posix标准,在用户空间没有缓冲,在内核空间还是进行了缓存的.数据-----内核缓存区----磁盘 假设内核缓存区长度为100字节,你 ...

随机推荐

  1. CnPack 开源软件项目

    Cnpack公共窗体库 ------------------------------ CnPack 2009-09-14 SVN 包,包括以下内容: 1. CnPack 组件包所有源代码.2. CnP ...

  2. Android开发 所需组件配置

    1 Unity中的Android Build Support下载 在Unity中的File>Building Settings>Android>Open Download Page, ...

  3. Android开发 互相调用模式之提供扩展类

    此种方法适用于:比如你要让Android做一些事情,这些事用不到任何资源,在Android下用纯代码就能实现它,这样就可以在Android下写好,将它封装成一个方法,打成包按照下面的方式丢给Unity ...

  4. 【AMAD】dramatiq -- Python3实现的一个快速的,可信赖的分布式任务处理库

    简介 动机 作用 用法 热度分析 个人评分 简介 Python3实现的一个快速的,可信赖的分布式任务处理库. 动机 dramatq1的官网2写道: Dramatiq成为现实的主要原因是,我想要一个简单 ...

  5. java按某属性分组并计算相关属性的和。

    工作中在处理集合的时候会经常遇到需要分组然后计算某属性的和,在java8中,通过stream来操作集合,还是非常方便的,像过滤(filter).分组(group).获取单个属性的值,总而言之,简单方便 ...

  6. elastic 查询案例Query与Filter + CRUD简单理解 + dynamic mapping + keyword

    1.增 PUT mytest01/external/ { "name": "xiaowei" } curl -XPUT '192.168.1.49:9200/m ...

  7. Java内存模型(三)原子性、内存可见性、重排序、顺序一致性、volatile、锁、final

          一.原子性 原子性操作指相应的操作是单一不可分割的操作.例如,对int变量count执行count++d操作就不是原子性操作.因为count++实际上可以分解为3个操作:(1)读取变量co ...

  8. (转)C++ bitset用法

    今天做题发现要用到bitset,找到一篇介绍的巨好的文章. 转载自:https://www.cnblogs.com/magisk/p/8809922.html C++的 bitset 在 bitset ...

  9. 笛卡尔树--牛客第四场(sequence)

    思路: O(n)建一颗笛卡尔树,再O(n)dfs向上合并答案就行了. #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include &l ...

  10. MySQL的库、表的详细操作

    目录 MySQL的库.表的详细操作 一 库操作 二 表操作 MySQL的库.表的详细操作 本节目录 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset ...