io:轻松地创建缓存
介绍
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:轻松地创建缓存的更多相关文章
- AppDir【创建缓存目录】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 创建缓存目录 public static String APP_CACHE = "";// /storage/e ...
- AppDir【创建缓存目录】【建议使用这个工具类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 创建缓存目录 public static String APP_CACHE = "";// /storage/e ...
- 加快ArcGIS Server创建缓存速度,CachingTools的实例数
大比例尺的缓存,由于文件非常大,创建非常花费时间,在硬件设备已固定的情况下,调整Caching tools的实例数是加快创建缓存的方法之一. 简单来说:CachingTools的最大并行实例数决定了C ...
- 利用开机账户登录“轻松访问”创建Windows后门
利用开机账户登录“轻松访问”创建Windows后门 实验原理: 利用登录账户界面的“轻松访问”中的“放大镜”,把它替换为cmd.exe程序,实现在不登录的情况下打开命令提示符,并进行一些操作(打开的c ...
- python 自动化之路 day 10 协程、异步IO、队列、缓存
本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 RabbitMQ队列 Redis\Memcached缓存 Paramiko SSH Twsited网络框架 引子 到目 ...
- SQLite剖析之异步IO模式、共享缓存模式和解锁通知
1.异步I/O模式 通常,当SQLite写一个数据库文件时,会等待,直到写操作完成,然后控制返回到调用程序.相比于CPU操作,写文件系统是非常耗时的,这是一个性能瓶颈.异步I/O后端是SQLit ...
- Tomcat系列(9)——Tomcat 6方面调优(内存,线程,IO,压缩,缓存,集群)
核心部分 内存 线程 IO 压缩 缓存 集群 一.JVM内存优化 Tomcat内存优化,包括内存大小,垃圾回收策略. Windows 下的catalina.bat,Linux 下的catalina.s ...
- Python异步IO --- 轻松管理10k+并发连接
前言 异步操作在计算机软硬件体系中是一个普遍概念,根源在于参与协作的各实体处理速度上有明显差异.软件开发中遇到的多数情况是CPU与IO的速度不匹配,所以异步IO存在于各种编程框架中,客户端比如浏览 ...
- 不带缓存IO和标准(带缓存)IO
linux对IO文件的操作分为: 不带缓存:open read.posix标准,在用户空间没有缓冲,在内核空间还是进行了缓存的.数据-----内核缓存区----磁盘 假设内核缓存区长度为100字节,你 ...
随机推荐
- 阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
创建数据库ssm并创建表account create database ssm; use ssm; create table account( id int primary key auto_incr ...
- SSM详细整合
SSM(Spring+Spring MVC+MyBatis) 1 简介 SSM 包含三大框架: Spring MVC (web level),采取 MVC 架构,意图取代麻烦的 Servlet 写法, ...
- spring boot系列(三)spring boot 配置spring data jpa
数据库使用MySQL,ORM使用spring data jpa 1 因此需要再pom.xml文件中添加相应jar包.如下: <!-- 引入jap --> <dependency> ...
- linux常用命令(21)tar命令
通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar命令可以为linux ...
- wmic查询ip
@echo off for /F "usebackq" %%R in (`wmic PATH Win32_NetworkAdapterConfiguration WHERE &qu ...
- __setattr__,__getattr__,__delattr__
class Foo: x = 1 def __init__(self,y): self.y = y def __getattr__(self,item): print("---->fr ...
- mint ui解决Navbar和Infinite scroll共存时的bug
Navbar和Infinite scroll共同使用时会出现无限加载的问题,滑动也会出现乱加载. 只需要判断一下就可以了,代码: html: <mt-navbar v-model="s ...
- Xshell的使用以及常用命令
工具/原料 Xshell 方法/步骤 打开软件,点击新建,在主机哪里写入要访问的ip地址,名称随意 点击文件之后,再点击打开: 就可以看到刚才新建的会话了: 点击连接,就会显示下面的画面,输入用户名, ...
- channel 介绍
!!!1.Memory Channel 内存通道 事件将被存储在内存中的具有指定大小的队列中. 非常适合那些需要高吞吐量但是失败是会丢失数据的场景下. 属性说明: !type – 类型,必须是“m ...
- 内存溢出之PermGen space异常解决
1.出现的异常: java.lang.OutOfMemoryError: PermGen space at sun.misc.Launcher$ExtClassLoader.getExtClassLo ...