博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python同步IO编程——StringIO、BytesIO和stream position
阅读量:7228 次
发布时间:2019-06-29

本文共 1058 字,大约阅读时间需要 3 分钟。

主要介绍python两个内存读写IO:StringIO和BytesIO,使得读写文件具有一致的接口

StringIO

内存中读写str。需要导入StringIO

>>> from io import StringIO>>> f = StringIO()>>> f.write('I O U')5>>> f.getvalue()'I O U'

也可以用一个str初始化StringIO,然后像读文件一样读取:

>>> from io import StringIO>>> f = StringIO('wc\nlove\nLY')>>> while 1:...     s = f.readline()...     if s =='':...             break...     print(s.strip())...wcloveLY

BytesIO

内存中操作二进制数据:

>>> from io import BytesIO>>> f = BytesIO()>>> f.write('武松'.encode('utf-8'))6>>> f.read()b''>>> f.getvalue()b'wc\xe6\xad\xa6\xe6\x9d\xbe'

细心的童鞋会发现,f.read()竟然为空?!

这是因为stream position的原因。可以理解为IO的指针位置,可以使用tell()方法获得该值:

>>> d = StringIO('hehe')>>> d.tell()0>>> d.read()'hehe'>>> d.tell()4>>> d.read() '' >>> d.getvalue() 'hehe'

当拟调用诸如read()、readline()、getvalue()方法时,stream position的值是在变化的!当你读取完所有的内容后,指针的位置已经在最后了,此时你再调用read()方法时就为空了。但是可以使用d.getvalue()方法查看内容。

这时如何调用read()使得结果如我所愿呢,可以结合seek()方法,该方法会重置指针的位置:

>>> d.seek(3)3>>> d.read()'e'>>> d.seek(1) 1 >>> d.read() 'ehe'

 

posted on
2018-03-20 21:59 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/hiwuchong/p/8613052.html

你可能感兴趣的文章
统计当前在线用户数量
查看>>
IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
查看>>
PHP项目记录
查看>>
.net面试题系列文章七(附答案)
查看>>
FastSocket
查看>>
ionic $ionicSlideBoxDelegate 滑动框事件
查看>>
点击文字,把input type="radio"也选中
查看>>
第一章 Java多线程技能
查看>>
Java 集合系列-第八篇-Map架构
查看>>
springmvc 3.2 @MatrixVariable bug 2
查看>>
React-Native PanResponder手势识别器
查看>>
IOS11 光标错位问题
查看>>
如何设计用户登录
查看>>
linux安装mysql5.7.19
查看>>
Zookeeper+ActiveMQ 集群实现
查看>>
加权有向图问题2----多源最短路径问题(Floyd算法)和关键路径算法
查看>>
logback logback.xml常用配置详解(三) <filter>
查看>>
KgMall B2B/B2B2c/C2C版店铺商号初始化
查看>>
Linux内核的ioctl函数学习
查看>>
Liunx Shell入门
查看>>