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 相关文章推荐
win10下Python3.6安装、配置以及pip安装包教程
Oct 01 Python
python实现对excel进行数据剔除操作实例
Dec 07 Python
Python机器学习之SVM支持向量机
Dec 27 Python
python中使用PIL制作并验证图片验证码
Mar 15 Python
点球小游戏python脚本
May 22 Python
pandas通过索引进行排序的示例
Nov 16 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
python 用for循环实现1~n求和的实例
Feb 01 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
Sep 29 Python
pycharm实现print输出保存到txt文件
Jun 01 Python
python实现的web监控系统
Apr 27 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 防恶意刷新实现代码
2010/05/16 PHP
很让人受教的 提高php代码质量36计
2012/09/05 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
2016/06/01 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
Python接收手机短信的代码整理
2020/08/02 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
数据库方面面试题
2012/04/22 面试题
企业承诺书格式
2014/05/21 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
意向协议书
2015/01/27 职场文书
文案策划岗位职责
2015/02/11 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
yolov5返回坐标的方法实例
2022/03/17 Python
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS