介绍

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. Python——作业12(选做)选中矩阵的每行或每列画出对应的折线图(python programming)

    import os import platform import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5 ...

  2. clientX和clientY属性需要注意的地方

    clientX和clientY为可视区鼠标的位置. 1. 随鼠标移动的div块[runjs] 当document有多个页面时,会出现问题.[runjs] 2. 解决方案:scrollTop, scro ...

  3. UnitTest之Xunit

    Unit Test 1.建立单元测试 新建一个类库项目,在Nuget中搜索xunit,选择 xUnit.net 和 xunit.runner.visualstudio 插件包安装. xunit.run ...

  4. java:activiti(工作流简介 )

    1.工作流:(workflow) 整个工作的流程 eg:请假工作流 (我)员工-->组长-->经理-->主管-->人事-->总经理(董事会) eg:出差(报账)工作流 ( ...

  5. 用yum安装的方法部署lamp服务

    # yum install -y httpd php php-mysql mariadb mariadb-server# vim /etc/httpd/conf/httpd.conf   <If ...

  6. 电脑的sid

    SID的查询方法:1.Win键+R键,打开运行,输入CMD2.输入:whoami /user3.就可以看到本机的SID了 SID的修改方法1.下载NewSID软件,并打开 2.可以指定一个SID,也可 ...

  7. TOEFL | 听力题型

    通常是2个对话,4个讲座,但可能会有加试: 2~3 conversations  5 Questions/Each 4~6 lectures            6 Questions/Each 正 ...

  8. 【转贴】Windows virtio 驱动

    Windows virtio 驱动 https://blog.51cto.com/dangzhiqiang/1833615 去年去中建总部的时候用过. 发现很多搞openstack的人都不清楚这一块的 ...

  9. UOJ46 玄学

    题目 一个比较自然的想法是线段树维护二进制分组. 因为我们询问的是一段连续的操作的积,所以我们可以建一棵线段树,每个节点存储当前区间各个操作的积. 这里的操作的积指的是把一系列操作做完之后区间每个位置 ...

  10. Kinect开发-Hello Kinect

    置好开发环境后,首先测试下是否真的完成,也就是能够正常进行开发.此时,当然就得祭出Hello World大法! 1.首先创建一个WPF Application工程,之后添加对Microsoft.Kin ...