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求列表交集的方法汇总
Nov 10 Python
Python中AND、OR的一个使用小技巧
Feb 18 Python
Python实现分割文件及合并文件的方法
Jul 10 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
git进行版本控制心得详谈
Dec 10 Python
基于Django与ajax之间的json传输方法
May 29 Python
python实现socket+threading处理多连接的方法
Jul 23 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
Dec 09 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
Python单元测试模块doctest的具体使用
Feb 10 Python
宝塔面板成功部署Django项目流程(图文)
Jun 22 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 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
PHP中的output_buffering详细介绍
2014/09/27 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
js实现开关灯效果
2020/03/30 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
浅谈python中set使用
2016/06/30 Python
Python实现多进程共享数据的方法分析
2017/12/04 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
淘宝店铺营销方案
2014/02/13 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
挂靠协议书范本
2014/04/22 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
关于教师节的广播稿
2015/08/19 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
Python3的进程和线程你了解吗
2022/03/16 Python
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android