python中StringIO和BytesIO

article/2025/9/29 9:27:04

1. 类文件对象

最常见的io操作是将磁盘中的文件读到内存以及内存内容写入文I件。还有一种内存和内存之间的IO,叫类文件对象,python中的StringIOBytesIO就是类文件对象,通俗解释即:像操作文件一样在内存中操作字符串和二进制内容
磁盘上的文件,就是将数据持久化到磁盘的一块区域,供后面重复使用。其优点就是持久化稳定不丢失,但是缺点也很明显,就是每次要使用都要从磁盘读入,相对内存而言很缓慢。如果只是短时间的重复利用,并不希望长期持久化,而且对速度的要求比较高,这时候就可以考虑缓存。

2. StringIO

这种类文件对象是用来存储字符串的,下面展示了如何使用

from io import StringIO, BytesIOif __name__ == "__main__":# 初始化并写入内容# io_obj = StringIO("i love china")# 初始化ioio_obj = StringIO()# 写入内容io_obj.write("i love china")# 读取io中内容content = io_obj.read()# 返回:空print(content)

如上打印结果为空,这是因为内存中的对象有一个标志位的概念,往里面写入,标志位后移到下一个空白处。而读数据的时候是从标志位开始读,所以想要读取前面的数据需要手动将标志位进行移动。
如下,通过seek方法将标志位移动到到首位,再读取内容就会读出所有内容;将seek中的0换成2会发现会舍弃前面两个字符。

    io_obj = StringIO()# 写入内容io_obj.write("i love china")# 将标志位移动到首位io_obj.seek(0)# 读取io中内容content = io_obj.read()# 返回:i love chinaprint(content)

通过getvalue()方法获取全部内容,该方法不受标志位影响。注意,当我们在初始化io时同时写入内容io_obj = StringIO("i love china"),此时读取内容也不受标志位影响

    io_obj = StringIO()# 写入内容io_obj.write("i love china")# 读取io中内容content = io_obj.getvalue()# 返回:i love chinaprint(content)

readline()方法读取以\n为界的一行数据,readlines()读取所有行,注意标志位置零

	io_obj = StringIO()# 写入内容io_obj.write("i love china\n wo ai zhongguo")# 读取io中内容io_obj.seek(0)# content = io_obj.readline()# 返回:i love china# print(content)content_all = io_obj.readlines()# 返回所有行:['i love china\n', ' wo ai zhongguo']print(content_all)

该对象使用完毕直接关掉,该内存里的内容被清空

io_obj.close()

3. BytesIO

StringIO只能存储字符串,对于图片视频等Bytes类型的内容就需要用到专门存储Bytes类型的BytesIO对象,用法完全相同,即:write()写内容,read()读内容,getvalue()获取所有内容…

	# 初始化ioio_obj = BytesIO()io_obj.write("i love china".encode("utf-8"))io_obj.seek(0)content = io_obj.read()# 返回:b'i love china'print(content)

4.应用

下面展示直接从网络读取一张图片,而不需要将图片保存到本地,再读本地文件

    import requestsfrom PIL import Imageresponse = requests.get('https://ts1.cn.mm.bing.net/th/id/R-C.fd4056c8c00979ab8561f8db8219c2ae?rik=JPk67EIYaKIS3A&riu=http%3a%2f%2fimg.mm4000.com%2ffile%2fa%2fa2%2f869bd2bd6a.jpg&ehk=2z%2bPuRHJOYtkm9ICs8fPs0EJbE96jJX2E8QyrVP5kyQ%3d&risl=&pid=ImgRaw&r=0')img = BytesIO()img.write(response.content)pict = Image.open(img)pict.show()img.close()

返回结果
在这里插入图片描述
注意:此处我们无法直接把下载的Bytes类型用Image打开,Image接受的参数是一个文件对象,或者类文件对象。所以要么是磁盘上的文件,要么是内存中的BytesIO


http://chatgpt.dhexx.cn/article/aCrJDRhL.shtml

相关文章

Python中的StringIO和BytesIO

1.StringIO 很多时候,数据读写不一定是文件,也可以在内存中读写。 StringIO顾名思义就是在内存中读写str。 要把str写入StringIO,我们需要先创建一个StringIO,然后,像文件一样写入即可: 使用getvalue()方…

StringIO 的使用, 存在的意义

StringIO存在的意义 比如想写一个脚本, 从网站下载一个压缩文件, 并解压到本地. 下意识可能分为三部 下载文件写入到本地用zipfile读取这个文件并解压 代码如下: # 1. 下载 import urllib2 res urllib.openurl(url) zip_data res.read()# 2. 写入本地 with open(file_name…

Python3学习笔记23-StringIO和BytesIO

StringIO 很多时候数据读取不一定是文件,也可以在内存中 StringIO顾名思义就是在内存中读写str 要把str写入StringIO,我们需要先创建一个StringIO,然后像文件一样写入即可: from io import StringIO f = StringIO() f.write(Hello) f.write( ) f.write(Word) print(f.getva…

Spring Boot+Vue+ElementUI实现文件的上传和下载到本地 并将 文件信息存入数据库

🎈 1 参考文档 springboot 文件MultipartFile上传路径问题 | 橙熟^ _ ^-CSDN(原本采用绝对路径,参考该文章改成相对路径) 组件 | Element 🚀2 导入依赖和配置application.yml文件 2.1 在pom.xml中导入依赖 采用了myb…

VUE项目中使用node.js搭建server连接本地mysql数据库

最近在研究vue项目中使用node.js搭建server服务器,链接本地mysql数据库,进行数据操作。 准备工作: 1.vue 2.node.js 3:mysql 前面两项对于入行前端的小伙伴应该不是问题了吧, 如果有的话,可以参考vue安装项目。 我选…

vue-实现文件下载

1.利用浏览器的导出功能 window.location.href 服务器文件路径 相当于后端告诉前端文件的地址,直接使用浏览器去下载 2.以流的形式下载文件 查了一些资料,主要用的代码如下,原文章:入口 在此基础上增加了params,…

(基于Vue.js的在线教学平台)源代码+数据库表 Vue.js+Node.js+MySQL 源码免费分享

一.先言 毕业已经快一年啦,工作总时长也一年半左右了啦。现在也毕业季,想着与其吃灰,不如把去年写的毕设可以分享给大家,大家可以做过参考什么的,毕竟社区里秉承分享快乐原则~当然,这个项目其实很简单&…

Vue下载安装步骤的详细教程(亲测有效) 1

目录 一、【准备工作】nodejs下载安装(npm环境) 1 下载安装nodejs 2 查看环境变量是否添加成功 3、验证是否安装成功 4、修改模块下载位置 (1)查看npm默认存放位置 (2)在 nodejs 安装目录下,创建 “node_global…

MySQL 免安装版的下载与配置教程

文章目录 前置附录MySQL 常用命令 事先准备下载 MySQL卸载 MySQL安装 MySQL设置 MySQL 开机自启动远程访问 MySQL使用 MySQL Workbench 远程访问 MySQL使用 Navicat Premium 远程访问 MySQL使用 DataGrip 远程访问 MySQL 后置附录MySQL 的配置文件数据库存放目录 笔者的运行环境…

Vue+MySQL+Springboot

文章目录 一、Vue前端1. 去官网下载Nodejs,如果希望稳定的开发环境则下LTS2. 安装好后winr输入node -v查询是否安装成功3. 高版本的nodejs自带npm,则不必再下载,查询命令npm -v4. 由于在国内使用npm是非常慢的,所以在这里我们推荐…

Vue.js下载与安装

windows系统 1. 特点 Vue.js:是一套构建用户界面的渐进式框架 Vue:只关注视图层,采用自底向上增量开发的设计 Vue:目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件 2. Vue.js的下载与安装 1)下载安装No…

MySQL的下载、配置(手把手)

一、MySQL下载 首先到官网下载MySQL,下载链接:https://downloads.mysql.com/archives/community/ 进入到页面: 选择你需要使用的MySQL版本(我这里选择5.7.24,比较稳定的版本)选择你的操作系统(windows&a…

vue+nodejs+mysql上线部署(服务器CentOS8)

一.Liunx配置安装node(环境配置) 建software文件夹 mkdir /opt/software 2.进入software文件夹 cd /opt/software 3.查看服务器系统,下载相应的node版本 uname -a 去nodejs 官网,找nodejs linux的下载链接 (推荐下载node-v16.5.0版本&#x…

[记录六]Vue+node+koa2+mysql+nginx+redis,全栈开发小程序和管理员管理系统项目——服务端图片上传与下载

大家好,我是小佑小佐:https://blog.csdn.net/Smell_rookie,是一名页面仔工程师,我会不定时在CSDN更新我的博客,有兴趣的可以点个关注来逛逛我的主页。 前言:本项目需要涉及前端上传图片与显示图片&#xff…

Vue.js 最新官方下载地址与项目导入

目录 VUE2下载网址 VUE2使用示例&#xff1a; VUE3下载与使用 VUE3示例&#xff1a; 在官网上下载vue.js或者是vue.min.js。并用<script>标签引入。 应小伙伴要求区分一下版本&#xff1a; VUE2下载网址 Installation — Vue.jsVue.js - The Progressive JavaScrip…

vue.js下载及安装的三种方法

vue.js下载及安装的三种方法 要下载安装vue首先得下载安装node.js和npm。下载安装好这两样以后就可以安装vue了&#xff0c;下面给大家介绍三种安装vue的方法。 1.直接在官网上下载 在官网上下载vue.js。并用<script>标签引入。 注意&#xff1a;下载时网址是 https://vu…

vue下载

第一步&#xff1a; 安装 node.js &#xff08;如果已安装就不用装了&#xff0c;当然如果你想安装最新版本的node.js最好是从新安装一遍&#xff09; node.js安装官网地址 https://nodejs.org/zh-cn/ 安装完成之后 winr 键 打开运行 输入cmd 打开命令行窗口 输入 node -v …

vue+node.js+express+axios实现连接mysql数据库(前后端分离,详细版)

这两个星期都在学vue技术&#xff0c;感觉真的是博大精深啊&#xff01; 今天&#xff0c;我给大家总结了用axios连接数据库的步骤&#xff0c;让大家少走弯路&#xff08;不像我&#xff0c;我用axios连了两天才连接成功。。。&#xff09; 1、首先&#xff0c;确保你已经有了…

VUE下载及安装

下载node.js node.js下载 &#xff0c;选择长期维护版安装NODE&#xff0c;直接全部默认&#xff0c;不要安装在C盘设置NODE 在nodejs安装路径下&#xff0c;新建node_global和node_cache两个文件夹&#xff0c;这是npm安装的全局模块所在的路径&#xff0c;以及缓存cache的路径…

全网最新的vue.js下载和安装的3种方法(2023年)

文章目录 1. 文章引言2. 环境搭建3. 安装vue.js3.1 方法一&#xff1a;官网下载vue.js源代码3.2 方法二&#xff1a;使用npm install创建3.3 方法三&#xff1a;使用bower下载 4. 总结 1. 文章引言 我主要从事java后端开发&#xff0c;但对前端也非常感兴趣&#xff0c;立志成…