注册 登录
Python基础教程

第一章: 环境搭建,安装Python

第二章: 挑选一款趁手的IDE

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

第八章: Python数据类型与运算

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元祖类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python项目实战

首页 > Python基础教程 > 第十五章: Python文件处理 > 15.4节:StringIO与BytesIO

15.4节:StringIO与BytesIO

薯条老师 2020-05-24 08:45:52 208616 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师的线下Python,Java小班周末班已经开课了,培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Java后端开发。授课详情请点击:http://chipscoco.com/?cate=6

15.4.1 在内存中进行数据读写

在15.1节到15.3节介绍的内容中,我们通过open方法来打开硬盘上的文件,并获得一个文件流对象,然后通过文件流对象对文件进行读写操作。在3.2节的内容中介绍了计算机存储器的层次结构。计算机中的存储设备按其访问速度和容量大小,被组织成了下图所示的金字塔形状的层次结构:

image.png

我们读写的硬盘文件,存储在外存储器中,从图可看出在硬盘中进行数据读写,远慢于在内存中进行数据读写。在本节的内容中,要介绍的是StringIO与BytesIO,通过这两个模块可以直接在内存中进行数据读写。

15.4.2 StringIO

通过StringIO可以获取一个基于内存的流对象。StringIO前面有一个修饰符String,String表示的是字符串对象,而IO表示输入输出,那么StringIO合起来就是在内存中对字符串进行读写操作。

构造StringIO的方法:
StringIO(initial_value='', newline='\n')
参数initial_value用来传递一个初始值,默认为空字符串。newline用来定义换行符,默认为'\n'。通过StringIO获取的内存流对象,与通过open方法获取的文件流对象,都有相同的接口。通过文件流对象的read, write,seek等方法对文件进行读写操作,同样也可以通过内存流对象的read,write,seek等方法来进行数据的读写操作。此外,StringIO对象还提供了一个getvalue方法,用来读取缓冲区中的全部数据。

StringIO对象的主要操作方法:

image.png

代码实例:

# __desc__ = 通过StringIO在内存中对字符串进行读写
 
# StringIO位于io模块下面,先从io中进行导出
from io import StringIO
 
# 构造一个StringIO对象
buffer = StringIO()
 
# 1. 执行write方法往内存缓冲区中写入数据,传递的参数为字符串类型
buffer.write("Python3")
 
# 执行read方法从内存缓冲区中读取数据
content = buffer.read()
print(content)
# 输出为空,指针已移动至尾部
 
 
# 2. 可以通过seek方法,将指针移动至头部进行数据读取
buffer.seek(0, 0)
content = buffer.read()
print(content)
# 输出为Python3
 
 
# 3. 也可以通过getvalue方法,读取缓冲区中的全部内容
content = buffer.getvalue()
# content的输出为Python3

15.4.3 BytesIO

BytesIO类似于StringIO,区别在于BytesIO用来在内存中对bytes类型进行读写。

执行字符串类型的encode方法,可以转换为bytes类型。执行bytes类型的decode方法可以转换为字符串类型。

构造BytesIO的方法:
BytesIO([initial_bytes])
[]表示里面的参数为可选参数,参数initial_bytes表示初始化的bytes类型的数据。

BytesIO对象的主要操作方法:

image.png

代码实例:

# __desc__ = 通过BytesIO在内存中对bytes类型进行读写
 
# BytesIO位于io模块下面,先从io中进行导出
from io import BytesIO
 
# 1.构造一个BytesIO对象
buffer = BytesIO(b"123456")
# 执行getvalue方法获取缓冲区中的全部内容
content = buffer.getvalue()
# content的输出为b"123456",是一个bytes类型
 
 
# 2. 执行getbuffer方法获取一个可读可写的视图对象
view = buffer.getbuffer()
 
# 对视图对象进行切片操作
view[3:5]= b"78"
 
content = buffer.getvalue()
print(content)
# content的输出为b'123786'
在对BytesIO对象执行getbuffer方法时,会返回一个可读写的视图对象。只要视图对象存在,就不能对缓冲区的大小进行调整和关闭。如需对缓冲区的大小进行调整或关闭,可以通过del来删除该视图对象。

代码实例:

# __desc__ = 通过BytesIO在内存中对bytes类型进行读写
 
# BytesIO位于io模块下面,先从io中进行导出
from io import BytesIO
 
# 1.构造一个空的BytesIO对象
buffer = BytesIO()
buffer.write(b"123456")
view = buffer.getbuffer()
 
# 由于视图对象已存在,执行write方法时会抛出异常
# buffer.write(b"789")
 
# 2.通过del来销毁该视图对象
del view
 
# 现在执行write方法时,就可以正常运行
 
buffer.write(b"789")
content = buffer.getvalue()
print(content)
# 输出为b"123456789"

15.4.4 知识要点

(1) 通过open方法获取到的文件流对象,是对硬盘中的文件进行操作。通过StringIO与BytesIO是创建一个基于内存的流对象,直接在内存缓冲区中对数据进行读写。
(2) 通过文件流对象的read, write,seek等方法对文件进行读写操作,同样也可以通过内存流对象的read,write,seek等方法来进行数据的读写操作。
(3) 在对BytesIO对象执行getbuffer方法时,会返回一个可读写的视图对象。只要视图对象存在,就不能对缓冲区的大小进行调整和关闭。

15.4.5 高薪就业班

(1) Python后端工程师高薪就业班,月薪10K-15K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪10K-20K, 免费领取课程大纲
(4) Python大数据工程师就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取学习资料:



欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录