广州番禺Python, Java小班周末班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6
15.4.1 在内存中进行数据读写
在15.1节到15.3节介绍的内容中,我们通过open方法来打开硬盘上的文件,并获得一个文件流对象,然后通过文件流对象对文件进行读写操作。在3.2节的内容中介绍了计算机存储器的层次结构。计算机中的存储设备按其访问速度和容量大小,被组织成了下图所示的金字塔形状的层次结构:
我们读写的硬盘文件,存储在外存储器中,从图可看出在硬盘中进行数据读写,远慢于在内存中进行数据读写。在本节的内容中,要介绍的是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对象的主要操作方法:
代码实例:
# __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对象的主要操作方法:
代码实例:
# __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 最具实力的小班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取Python学习资料: