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实现动态添加类的属性或成员函数的解决方法
Jul 16 Python
Python中关键字is与==的区别简述
Jul 31 Python
python实现自动登录人人网并采集信息的方法
Jun 28 Python
Python基于PycURL实现POST的方法
Jul 25 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
使用Pyinstaller的最新踩坑实战记录
Nov 08 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
Python实现的合并两个有序数组算法示例
Mar 04 Python
Django Rest framework认证组件详细用法
Jul 25 Python
Python实现bilibili时间长度查询的示例代码
Jan 14 Python
python下载的库包存放路径
Jul 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
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
PHP网络操作函数汇总
2015/05/18 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
使用Python操作MySQL的一些基本方法
2015/08/16 Python
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
Farnell德国:电子元器件供应商
2018/07/10 全球购物
高级销售员求职信
2013/10/25 职场文书
英语简历自我评价
2014/01/26 职场文书
不假外出检讨书
2014/01/27 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
通知函格式范文
2015/04/27 职场文书
大学推普周活动总结
2015/05/07 职场文书
Django实现翻页的示例代码
2021/05/24 Python
Python中的程序流程控制语句
2022/02/24 Python
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android