首页 > 技术文章 > StringIO和BytesIO

hkcs 2017-10-29 15:54 原文

StringIO:
	from io import StringIO
内存中,开辟的一个文本模式的buffer,可以像文件对象一样操作它
当close方法被调用的时候,这个buffer会被释放
	
getvalue() 获取全部内容,跟文件指针没有关系

例子:
from io import StringIO

sio = StringIO()
print(sio.readable(), sio.writable(), sio.seekable())#可读可写可seek
>>>True True True
sio.write('test\npython')
>>>11
sio.seek(0)
>>>0
print(sio.readline())
>>>test
print(sio.getvalue())#无视指针输出全部内容
>>>test
   python
>>>
sio.close()

StringIO 好处:
	磁盘的操作比内存操作要慢,内存足够的情况下,一般的优化思路是少落地,减少磁盘IO的
过程,可以提高程序的运行效率


BytesIO:
	io模块中的类:
	from io import StringIO

	内存中开辟一个二进制模式的buffer,可以像文件对象一样操作它
	当close方法被调用的时候,这个buffer会被释放

例子:
from io import BytesIO

bio = BytesIO()
print(bio.readable(), bio.writable(), bio.seekable())
>>> True True True
bio.write(b"test\npython")
>>> 11
bio.seek(0)
>>>0
print(bio.readline())
>>> b'test\n'
print(bio.getvalue())
>>>b'test\npython'
bio.close()

file-like对象:
	类文件对象,可以像文件对象一样操作
	socket对象,输入输出对象(stdin、stdout)都是类文件对象

from sys import stdout

f = stdout
print(type(f))
>>><class '_io.TextIOWrapper'>
f.write('test.com')
>>>test.com 

  

推荐阅读