Python StringIO 对象

发布于 2021-04-09 13:24:25 字数 1710 浏览 1321 评论 0

StringIO 是一个类文件(file-like)对象,真正的文件对象最终会映射到磁盘,而 StringIO 是一个和file对象有类似行为的内存文件对象。当有些操作要求是文件对象时,而你并不希望给出真实的文件对象时,此时你可以使用 StringIO 来替换。比如:GzipFile 构造方法接收参数类型就是文件类型。StringIO 就可以派上用场了

import gzip
import StringIO

file = StringIO.StringIO()
gzip_file = gzip.GzipFile(fileobj=file, mode='w')
gzip_file.write('hello world')
gzip_file.close()

print stringio.getvalue()  #此方法必须是在stringio.close()调用前,否则ValueError

再比如:

import StringIO
MESSAGE =  “this is amazing game”
file = StringIO.StringIO(MESSAGE)
print file.read()

cStringIO:性能更高的 StringIO

cStringIO 是一个速度更快的 StringIO,其接口与 StringIO 基本类似,但是有以下区别:

1、不能构建任何版本的子类,因为它的构造方法返回的是一个 built-in 类型

 #coding:utf-8
 import StringIO

 stringio = StringIO.StringIO(u'helloworld我是')
 print type(stringio)    #<type 'instance'>
 stringio.size = 10      #可以给实例赋任何属性
 print stringio.getvalue()

 import cStringIO
 cs = cStringIO.StringIO(u'helloworld')
 print type(cs) #<type 'cStringIO.StringI'>
 cs.size = 10   #此处会报错,因为cStringIO.StringIO没有属性size
 print cs.getvalue()

2、cStringIO 不接收中文 unicode 字符

 cs = cStringIO.StringIO(u'helloworldi我是')
 #异常
 Traceback (most recent call last):
   File "test.py", line 10, in <module>
     cs = cStringIO.StringIO(u'helloworldi鎴戞槸')
 UnicodeEncodeError: 'ascii' codec can't encode characters in position 11-12: ordinal not in range(128)

python3 StringIO

python3 去掉了 StringIO 和 cStringIO 模块,取而代之的是 io.StringIO,要写出兼容 py2 和 py3 的代码的话,使用:

try:
    from cStringIO import StringIO  # py2
except ImportError:
    from io import StringIO  # py3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文