介绍

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. PHP中获取当前页面的完整URL、PHP URL处理、获取不带扩展名的文件名

    javascript实现: top.location.href 顶级窗口的地址this.location.href 当前窗口的地址 PHP实现 #测试网址: http://localhost/blog ...

  2. mongoDB 安装过程

    1.在官方网站下载 mongoDB的安装包,我下载的是3.4.6  系统为win10_64 2.需要安装vc++2015 在安装时发现 win7 系统安装不了. 不得已才安装的win10 3.安装mo ...

  3. java高级之Io流

    1.1,什么是io流? 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作 ...

  4. python 连接mysql数据库:pymysql

    示例:import pymysql conn=pymysql.connect( host="127.0.0.1", #数据库IP port=3306, #数据库端口 user=&q ...

  5. windows安装python flask虚拟环境

    安装pipenv的虚拟环境主要是为了防止不同python版本之间冲突的问题,虚拟环境安装的包包不会对外部真实环境产生任何作用,只会作用于虚拟环境.这样,一个flask框架应用对应一个pipenv虚拟环 ...

  6. 阶段3 3.SpringMVC·_06.异常处理及拦截器_5 SpringMVC拦截器之编写controller

    先新建包,com.itcast.controller,然后把异常拦截的项目的UserController复制过来. 复制过来稍作修改 创建pages文件件,然后新建success.jsp页面 部署当前 ...

  7. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_3 响应之返回值是void类型

    定义先的标签 返回void 测试默认的跳转 虽然是404但是方法执行了. 默认请求了 testVoid.jsp这个页面.请求路径叫什么 就访问哪个jsp页面. 使用request请求转发 抛出的异常 ...

  8. linux下抓取tomcat相关内存、线程、文件句柄等快照,用于故障排除。

    以下脚本推荐放在定时任务里,写好cron表达式,在不影响业务系统的情况下dump一些信息分析系统性能瓶颈以及故障排除. 因为每次dump的时候jvm会暂停(几秒到几十秒不等).所以在生产系统使用时慎用 ...

  9. k8s测试容器之间是否互通

    [root@lab2 .kube]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE curl-87b54756-rbqz ...

  10. 获取sql server中自增量之scope_identity(),@@Identity,IDENT_CURRENT的区别

    http://www.lmwlove.com/ac/ID480 在sql server2005,如果要获某个表最新增加的自增量,我们都知道,可以使用COPE_IDENTITY. IDENT_CURRE ...