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 相关文章推荐
wxPython窗口的继承机制实例分析
Sep 28 Python
Python 自动补全(vim)
Nov 30 Python
python根据url地址下载小文件的实例
Dec 18 Python
详解Python正则表达式re模块
Mar 19 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
Django DRF路由与扩展功能的实现
Jun 03 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 Python
python如何用matplotlib创建三维图表
Jan 26 Python
python 制作本地应用搜索工具
Feb 27 Python
深入浅析Django MTV模式
Sep 04 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中echo,print_r与var_dump区别分析
2014/09/29 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
jQuery版Tab标签切换
2011/03/16 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
Python中针对函数处理的特殊方法
2014/03/06 Python
Python常用列表数据结构小结
2014/08/06 Python
python实现逻辑回归的方法示例
2017/05/02 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
简单了解python中对象的取反运算符
2019/07/01 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
QML用PathView实现轮播图
2020/06/03 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
升职自荐信范文
2013/10/05 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
大学辅导员述职报告
2015/01/10 职场文书
工作推荐信模板
2015/03/25 职场文书
介绍信格式样本
2015/05/05 职场文书
学困生转化工作总结
2015/08/13 职场文书
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android
Python中request的基本使用解决乱码问题
2022/04/12 Python