在前面的教程中,我们已经介绍了Python关于文件的读取和写入操作。在实际的程序开发中,我们有时候不需要真正地把数据写入到文件中,只需要在内存中读写数据,所以Python中IO模块的StringIO函数为我们提供了字符串str在内存中读写的操作,而不需要创建实际的文件。
想要把字符串str写入StringIO,我们首先需要创建一个StringIO对象,然后像写入文件一样把字符串写入StringIO对象,例如:
动手练一练:
from io import StringIO
a = StringIO()
a.write("学Python用Pyhint编辑器,\n")
a.write("进入www.pyhint.com在线学习。")
print(a.getvalue())
执行以上代码,输出结果为:
学Python用Pyhint编辑器,
进入www.pyhint.com在线学习。
上面的例子中,我们首先需要通过import语句导入io模块,然后使用write()函数将数据写入StringIO对象,和写入文件的操作基本上一样,最后通过getvalue()函数获取写入后的全部内容。
从内存中读取字符串str数据,也和读取文件一样,我们可以用一个字符串str初始化StringIO,然后像读文件一样读取数据,例如:
动手练一练:
from io import StringIO
a = StringIO("学Python用Pyhint编辑器,\n进入www.pyhint.com在线学习。")
for i in a.readlines():
print(i)
执行以上代码,输出结果为:
学Python用Pyhint编辑器,
进入www.pyhint.com在线学习。
在Python中,StringIO对象只能把字符串str数据写入内存中,如果想要把二进制数据写入内存中,就需要使用BytesIO对象。
想要把二进制数据写入BytesIO,同样首先需要创建一个BytesIO对象,然后把二进制bytes数据写入BytesIO对象,例如:
动手练一练:
from io import BytesIO
a = BytesIO()
a.write("数据".encode("utf-8"))
print(a.getvalue()) # 输出 b'\xe6\x95\xb0\xe6\x8d\xae'
print(a.getvalue().decode("utf-8")) # UTF-8解码 输出 数据
执行以上代码,输出结果为:
b'\xe6\x95\xb0\xe6\x8d\xae'
数据
上面的例子中,encode("utf-8")方法将字符串str类型的数据经过UTF-8编码转换成二进制bytes类型的数据,然后使用write()函数将二进制数据写入BytesIO对象,最后通过decode("utf-8")方法将UTF-8解码输出。
从内存中读取二进制bytes数据,和StringIO一样,我们同样用一个二进制bytes初始化BytesIO对象,然后像读文件一样读取二进制数据,例如:
动手练一练:
from io import BytesIO
a = BytesIO(b'\xe6\x95\xb0\xe6\x8d\xae')
print(a.read().decode("utf-8")) # 输出 数据
执行以上代码,输出结果为:
数据