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'
'''