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实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
深入解析Python中的list列表及其切片和迭代操作
Mar 13 Python
Python中强大的命令行库click入门教程
Dec 26 Python
浅谈numpy数组的几种排序方式
Dec 15 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
Apr 08 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
Python爬虫实现“盗取”微信好友信息的方法分析
Sep 16 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
python lambda函数及三个常用的高阶函数
Feb 05 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
什么是python的列表推导式
May 26 Python
python3.7添加dlib模块的方法
Jul 01 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到MongoDB简易对照表的详解
2013/06/03 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
jQuery 前的按键判断代码
2010/03/19 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
JS删除数组指定值常用方法详解
2020/06/04 Javascript
Python的函数嵌套的使用方法
2014/01/24 Python
python中的yield使用方法
2014/02/11 Python
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
Python----数据预处理代码实例
2019/03/20 Python
python脚本第一行如何写
2020/08/30 Python
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
高二政治教学反思
2014/02/01 职场文书
先进集体获奖感言
2014/02/13 职场文书
2014年内勤工作总结
2014/11/24 职场文书
2014年质检工作总结
2014/11/26 职场文书
大国崛起英国观后感
2015/06/02 职场文书