Python3 io文本及原始流I/O工具用法详解


Posted in Python onMarch 23, 2020

io模块在解释器的内置open()之上实现了一些类来完成基于文件的输入和输出操作。这些类得到了适当的分解,从而可以针对不同的用途重新组合——例如,支持向一个网络套接字写Unicode数据。

1.1 内存中的流

StringIO提供了一种很便利的方式,可以使用文件API(如read()、write()等)处理内存中的文本。有些情况下,与其他一些字符串连接技术相比,使用StringIO构造大字符串可以提供更好的性能。内存中的流缓冲区对测试也很有用,写入磁盘上真正的文件并不会减慢测试套件的速度。

下面是使用StringIO缓冲区的一些标准例子。

import io
# Writing to a buffer
output = io.StringIO()
output.write('This goes into the buffer. ')
print('And so does this.', file=output)
# Retrieve the value written
print(output.getvalue())
output.close() # discard buffer memory
 
# Initialize a read buffer
input = io.StringIO('Inital value for read buffer')
# Read from the buffer
print(input.read())

这个例子使用了read(),不过也可以用readline()和readlines()方法。StringIO类还提供了一个seek()方法,读取文本时可以在缓冲区中跳转,如果使用一种前向解析算法,则这个方法对于回转很有用。

Python3 io文本及原始流I/O工具用法详解

要处理原始字节而不是Unicode文本,可以使用BytesIO。

import io
# Writing to a buffer
output = io.BytesIO()
output.write('This goes into the buffer. '.encode('utf-8'))
output.write('ÁÇÊ'.encode('utf-8'))
# Retrieve the value written
print(output.getvalue())
output.close() # discard buffer memory
 
# Initialize a read buffer
input = io.BytesIO(b'Inital value for read buffer')
# Read from the buffer
print(input.read())

写入BytesIO实例的值一定是bytes而不是str。

Python3 io文本及原始流I/O工具用法详解

1.2 为文本数据包装字节流

原始字节流(如套接字)可以被包装为一个层来处理串编码和解码,从而可以更容易地用于处理文本数据。TextIOWrapper类支持读写。write_through参数会禁用缓冲,并且立即将写至包装器的所有数据刷新输出到底层缓冲区。

import io
# Writing to a buffer
output = io.BytesIO()
wrapper = io.TextIOWrapper(
  output,
  encoding='utf-8',
  write_through=True,
)
wrapper.write('This goes into the buffer. ')
wrapper.write('ÁÇÊ')
# Retrieve the value written
print(output.getvalue())
output.close() # discard buffer memory
 
# Initialize a read buffer
input = io.BytesIO(
  b'Inital value for read buffer with unicode characters ' +
  'ÁÇÊ'.encode('utf-8')
)
wrapper = io.TextIOWrapper(input, encoding='utf-8')
# Read from the buffer
print(wrapper.read())

这个例子使用了一个BytesIO实例作为流。对应bz2、http,server和subprocess的例子展示了如何对其他类型的类似文件的对象使用TextIOWrapper。

Python3 io文本及原始流I/O工具用法详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现ftp客户端示例分享
Feb 17 Python
Fiddler如何抓取手机APP数据包
Jan 22 Python
全面了解python字符串和字典
Jul 07 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
python创建列表和向列表添加元素的实现方法
Dec 25 Python
django中send_mail功能实现详解
Feb 06 Python
Python程序运行原理图文解析
Feb 10 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
django输出html内容的实例
May 27 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
Mar 30 Python
python绘图模块之利用turtle画图
Feb 12 Python
python实现横向拼接图片
Mar 23 #Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 #Python
python实现拼接图片
Mar 23 #Python
python使用PIL剪切和拼接图片
Mar 23 #Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 #Python
python实现单张图像拼接与批量图片拼接
Mar 23 #Python
OpenCV Python实现拼图小游戏
Mar 23 #Python
You might like
php分页思路以及在ZF中的使用
2012/05/30 PHP
php读取mysql的简单实例
2014/01/15 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
uni-app使用countdown插件实现倒计时
2020/11/01 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
python的id()函数解密过程
2012/12/25 Python
python with statement 进行文件操作指南
2014/08/22 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
python安装twisted的问题解析
2018/08/21 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
木工主管岗位职责
2013/12/08 职场文书
博士学位自我鉴定范文
2013/12/26 职场文书
工厂仓管员岗位职责
2014/01/01 职场文书
终止劳动合同协议书
2014/04/14 职场文书
家长会标语
2014/06/24 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
圣诞晚会主持词
2015/07/01 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
MySQL Router的安装部署
2021/04/24 MySQL