python的StringIO

582 篇文章 8 订阅 ¥119.90 ¥299.90
本文深入探讨了Python中的StringIO模块,它允许在内存中读写字符串,而无需使用文件。同时,文章对比了StringIO与BytesIO的区别,解释了何时使用它们以及它们在处理文本和二进制数据时的不同之处。
摘要由CSDN通过智能技术生成
python2中:
from StringIO import StringIO
python3中:
from io import StringIO

StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的"文件",在内存中读写str,我们可以像操作磁盘文件那样来操作StringIO,主要用于在内存缓冲区中读写数据。



output=StringIO([buf])
创建一个StingIO对象,寄存在缓冲区,可选参数buf是一个str或unicode类型,它将会与后续写的数据存放一起。

如:'Hello\n'和Word\n'会被放在一个缓冲区中。
output=StringIO('Hello\n')
output.write('Word\n')
print(output.getvalue())
'''
结果:Word
将原来默认的Hello覆盖了,因此在写入数据之前,应先将读写位置移动到结尾,然后再写入,否则,初始化数据会被覆盖掉,因为读写位置默认是0
'''


StringIO类中的方法:
(1)、output.read([n])
参数n限定读取长度,int类型;缺省状态为从当前读写位置读取对象output中存储的所有数据。读取结束后,读写位置被移动

(2)、output.readline([length])
参数length限定读取的结束位置,int类型; 缺省状态为None,从当前读写位置读取至下一个以"\n"为结束符的当前行。读写位置被移动

(3)、output.readlines([sizehint])
参数sizehint为int类型;缺省状态为读取所有行并作为列表返回, 且从当前读写位置读取至下一个以"\n"为结束符的当前行。读写位置被移动

(4)、output.write(s)
从读写位置将参数s写入给对象output。参数s为str或unicode类型。读写位置被移动

(5)、output.writelines(list)
从读写位置将list写入给对象output。参数list为一个列表,列表的成员为str或unicode类型。读写位置被移动。

(6)、output.getvalue()
此函数没有参数,无论读写位置在哪里,都能够返回对象output中的所有数据

(7)、output.truncate([size])
有size参数,无论读写位置在哪里,都从起始位置开始,裁剪size字节的数据
无size参数,将当前读写位置之前的数据,裁剪下来

(8)、output.tell()
返回当前读写位置,读写位置默认是0,因此,之后写入的数据("xxxxx!!!xxxxxx")会将之前的数据覆盖掉  

(9)、output.seek(pos[,mode])
移动当前读写位置至pos处,
可选参数mode:
为0时将读写位置移动至pos处,mode的默认值为0。
为1时将读写位置从当前位置起向前或向后移动|pos|个长度,
为2时将读写位置置于末尾处再向前或向后移动|pos|个长度;

(10)、output.close()
释放缓冲区,执行此函数后,数据将被释放,也不可再进行操作。

(11)、output.isatty()
此函数总是返回0。

(12)、output.flush()
刷新内部缓冲区。






举例1:
output=StringIO('Hello\n')
output.seek(0,2)               #将读写位置移动到末尾
output.write('Word\n')         #这样再写入字符串时,就不会覆盖之前默认的值
print(output.getvalue())       
'''
结果:
Hello
Word
'''

#如果使用read()方法读取,则应该先将指针移动到开头,否则读取结果为空
#print(output.read())

output.seek(0,0)
print(output.read())
结果:
Hello
Word
'''

StringIO和BytesIO的区别

StringIO和BytesIO的区别:
StringIO只能操作字符串,如果要操作二进制数据则需要使用BytesIO
from io import BytesIO
f=BytesIO()
f.write('中文'.encode('utf-8'))  #将 '中文'经utf-8编码成字节
print(f.getvalue())
'''
b'\xe4\xb8\xad\xe6\x96\x87'
'''
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值