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采用django框架实现支付宝即时到帐接口
May 17 Python
Python中常用信号signal类型实例
Jan 25 Python
Windows 7下Python Web环境搭建图文教程
Mar 20 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
python3.x 将byte转成字符串的方法
Jul 17 Python
Python Requests库基本用法示例
Aug 20 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
Aug 09 Python
Keras实现支持masking的Flatten层代码
Jun 16 Python
如何用Python提取10000份log中的产品信息
Jan 14 Python
Python爬取梨视频的示例
Jan 29 Python
Python 实现定积分与二重定积分的操作
May 26 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
如何抽象一个Vue公共组件
2017/10/17 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
请求时token过期自动刷新token操作
2020/09/11 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
Python 文件重命名工具代码
2009/07/26 Python
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
讲解Python中运算符使用时的优先级
2015/05/14 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
scrapy头部修改的方法详解
2020/12/06 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
介绍一下游标
2012/01/10 面试题
学生请假条格式
2014/04/11 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS