问题
使用操作类文件对象的程序来操作文本或二进制字符串。
解决方案
使用 io.StringIO()
和 io.BytesIO()
类来创建类文件对象操作字符串数据。比如:
import io
s = io.StringIO()
print(s)
<_io.StringIO object at 0x108b18dc8>
s.write('Hello World!\n')
print(s.getvalue())
Hello World!
print('This is a test.', file = s)
print(s.getvalue())
Hello World!
This is a test.
io.StringIO
只能用于文本。如果要操作二进制数据,要使用 io.BytesIO
类来代替。比如:
ss = io.BytesIO()
print(ss)
<_io.BytesIO object at 0x10d0a1b48>
ss.write(b'binary data')
print(ss.getvalue())
b'binary data'
讨论
当需要模拟一个普通文件时,StringIO
和 BytesIO
类是很有用的。 比如,在单元测试中,可以使用 StringIO
来创建一个包含测试数据的类文件对象, 这个对象可以被传给某个参数为普通文件对象的函数。
需要注意的是,StringIO
和 BytesIO
实例并没有正确的整数类型的文件描述符。 因此,它们不能在那些需要使用真实的系统级文件,如文件,管道或者是套接字的程序中使用。
网友评论