python--基础知识点--StringIO、BytesIO

1. StringIO

StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的“文件”,我们可以将操作磁盘文件那样来操作StringIO。

因为文件对象和StringIO大部分的方法都是一样的,比如read, readline, readlines, write, writelines都是有的,这样,StringIO就可以非常方便的作为"内存文件对象"。

一个简单的例子,让你对StringIO有一个感性的认识:

from io import StringIO
 
s =io.StringIO()
s.write("aaaa")
lines = ['xxxxx', 'bbbbbbb']
s.writelines(lines)

s.seek(0)
print(s.read())

print(s.getvalue())
s.write(" ttttttttt ")
s.seek(0)
print(s.readlines())

通过例子,我们看到了StringIO的行为,基本与file一致。StringIO提供了一个方法,可以方便的获取其中的数据:StringIO. getvalue()。如果使用read方法获取其中的数据,必须通过seek先设置"文件指针"的位置。

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

from io import StringIO


f = StringIO('Hello!\nHi!\nGoodbye!')
while True:
    s = f.readline()
    if s == '':
        break
    print(s.strip())


"""
运行结果:
Hello!
Hi!
Goodbye!

Process finished with exit code 0
"""

2. BytesIO

StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO。

BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes:

from io import BytesIO


f = BytesIO()
f.write('中文'.encode('utf-8'))

print(f.getvalue())


"""
运行结果:
b'\xe4\xb8\xad\xe6\x96\x87'

Process finished with exit code 0
"""

请注意,写入的不是str,而是经过UTF-8编码的bytes。

和StringIO类似,可以用一个bytes初始化BytesIO,然后,像读文件一样读取:

from io import BytesIO


f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
f.seek(2)  # whence:可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。
print(f.read())


"""
运行结果:
b'\xad\xe6\x96\x87'

Process finished with exit code 0
"""

3. 总结

StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口。

python2中StringIO.StringIO对应python3中io.StringIO
python2中cStringIO.StringIO对应python3中io.BytesIO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值