<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">python中的StringIO与cStringIO</span>

StringIO与cStringIO类似,都是向内存中写入文件,其操作与文件操作类似(不敢说相同,但是至少读写是一样的)。一StringIO为例如下:

  1. import StringIO
  2. a = StringIO.StringIO( 'title')
  3. a.write( 'content1\n')
  4. a.write( 'content2')
  5. a.seek( 0) #必须指定文件指针位置到文件开头,否则无法读出数据
  6. print a.read()
  7. a.close() #必须和文件一样关闭

输出结果是:
content1
content2
为什么title没有了呢?
因为实例化一个StringIO之后,文件指针是在文件开头的,也就是指向‘title’开头的位置,之后写入的‘conttent1’将其覆盖了而已。
如果不想让’title‘被覆盖,那么需要将文件指针移动到’title‘末尾,即利用a.seek()函数。
但是这里StringIO文件类似一个列表,和文件操作不一样,a.seek(2)不代表文件末尾,而代表写入参数的第三个字符的位置,即’title‘中第二个’t'的位置。
或者,直接实例化一个空的StringIO,然后再写入内容,一切烦恼就都没有了。

cStringIO不同之处在于,如果实例化一个带有默认数据的cStringIO.StringIO类。那么该实例是read-only的:

  1. import StringIO
  2. a = cStringIO.StringIO( 'title')
  3. a.write( 'content1\n')

返回AttributeError: 'cstringIO.StringI' object has no attribute ‘write’

但是如果实例化时不提供默认参数,那么则是可以读写的。注意到

  1. import cStringIO, StringIO
  2. a = StringIO.StringIO()
  3. b = StringIO.StringIO( 'a')
  4. c = cStringIO.StringIO()
  5. d = cStringIO.StringIO( 'a')
  6. print type(a)
  7. print type(b)
  8. print type(c)
  9. print type(d)
  10. print a.__class__
  11. print b.__class__
  12. print c.__class__
  13. print d.__class__

返回: <type instance>
<type instance>
<type cStringIO.StringO>
<type cStringIO.StringI>
<class StringIO.StringIO at XXXX>
<class StringIO.StringIO at XXXX>
<type cStringIO.StringO>
<type cStringIO.StringI>
但是说明带默认参数的 cStringIO.StringIO生成的是cStringIO.StringIO,它是read-only的,无默认参数的是cStringIO.StringIO,它是可读写的。

Python中的StringIO与cStringIO简析相关推荐

  1. mysql job_MySQL数据传输中dtle 之 job 实现简析-爱可生

    原标题:MySQL数据传输中dtle 之 job 实现简析-爱可生 作者:吕海龙 爱可生 DTLE 团队成员,负责 DTLE 开发 ,日常问题处理以及相关问题的排查. 本文来源:原创投稿 *爱可生开源 ...

  2. Python源码学习:启动流程简析

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> Python简介: python主要是动态语言,虽然Python语言也有编译,生成中 ...

  3. python中if控制语句_Python 极简教程(十二)逻辑控制语句 if else

    计算机软件之所以能够对不同的情况进行不同的处理,就是我们在编码的时候,通过逻辑控制语句,告诉软件在不同的情况下应该做什么处理. 比如我们在登录的时候,那么当你输入正确的账号密码和错误的账号密码,完全是 ...

  4. python中各种属性与方法深析

    在了解类的继承之后,我们需要特别知道以下几个概念及其具体使用: (1)私有属性: (2)私有方法: (3)类属性: (4)类方法: (5)静态方法: 注意:python在类中没有声明的话,所有的方法都 ...

  5. Python内存管理机制及优化简析(转载)

    from:http://kkpattern.github.io/2015/06/20/python-memory-optimization-zh.html 准备工作 为了方便解释Python的内存管理 ...

  6. python中使用StringIO出现的问题

    一,在使用StringIO过程中出现的问题 1,StringIO在处理字符串时会报如下错误: TypeError: 'module' object is not callable 错误原因:与impo ...

  7. Python学习笔记之eval函数简析

    一个最基本的eval()函数的格式应该如下: >>> command = 'print(\'Hello world!\')' >>> eval(command) H ...

  8. Ruby系统中的AJAX开发技术简析

    一. Ajax的简短历史 在短短几个月内,Ajax从一种十分模糊稀罕的技术一下变成最热门的 东西.本文将介绍极其容易使用的Ajax支持-作为Ruby on Rails web应用程序框架的一部分实现. ...

  9. Style Report中报表组件的使用场景简析

    报表组件,英文称呼为report bean.在诸多报表中,可以看到很多报表元素,特别是报表Bean.报表Bean是报表中的一个元素,是报表的组件:创建好的报表Bean,可以作为备用,以供其他的报表可以 ...

最新文章

  1. React中如何优雅的捕捉事件错误
  2. 正确导入svn拉取的工程
  3. bash命令怎么在linux系统中使用
  4. System.Web.HttpException: The file ~/xxx//Index.cshtml cannot be requested directly because it cal
  5. Vue-router(二) 子路由(嵌套路由)
  6. Linux 中断处理浅析
  7. 训练深度学习_深度学习训练tricks整理1
  8. 微信公众号怎么给微店设置运费
  9. 基于javaweb(springboot)城市地名地址信息管理系统设计和实现
  10. suse 网卡 bond
  11. 一个成功企业家立下的22条规矩
  12. 下载虚拟机安装linux镜像(图形化)
  13. JavaScript — json文件的读取与写入
  14. Netflix混沌工程手册Part 1:混沌工程简介
  15. 六轴陀螺仪简介及在智能车中的应用
  16. 阿里巴巴国际站新手运营攻略
  17. Android APP旋转屏幕
  18. 智能家居加速落地,景联文科技提供数据采集标注服务
  19. [ Arduino+Python ] 做一个串口屏,显示CPU使用率
  20. 2022款联想拯救者Y9000P和Y9000X的区别

热门文章

  1. C#MessageBox(消息提示框)使用详解
  2. ML之PDP:机器学习可解释性之部分依赖图(Partial Dependence Plots)之每个特征如何影响您的预测?
  3. 考研报名时,需要准备哪些信息?
  4. 大话nbu四(nbu备份恢复catalog)
  5. php zip解压,php解压缩zip和rar压缩包文件
  6. Android高德地图的定位
  7. 互联网直播点播平台EasyDSS登录页广告位图片上传接口报错问题分析
  8. PTA 数组 7-1 计算平均分并输出低于平均分的成绩
  9. opencv鱼眼镜头矫正
  10. [Axure]QQ注册页面低保真原型