Python中的StringIO与cStringIO简析
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">python中的StringIO与cStringIO</span>
StringIO与cStringIO类似,都是向内存中写入文件,其操作与文件操作类似(不敢说相同,但是至少读写是一样的)。一StringIO为例如下:
- import StringIO
- a = StringIO.StringIO( 'title')
- a.write( 'content1\n')
- a.write( 'content2')
- a.seek( 0) #必须指定文件指针位置到文件开头,否则无法读出数据
- print a.read()
- a.close() #必须和文件一样关闭
输出结果是:
content1
content2
为什么title没有了呢?
因为实例化一个StringIO之后,文件指针是在文件开头的,也就是指向‘title’开头的位置,之后写入的‘conttent1’将其覆盖了而已。
如果不想让’title‘被覆盖,那么需要将文件指针移动到’title‘末尾,即利用a.seek()函数。
但是这里StringIO文件类似一个列表,和文件操作不一样,a.seek(2)不代表文件末尾,而代表写入参数的第三个字符的位置,即’title‘中第二个’t'的位置。
或者,直接实例化一个空的StringIO,然后再写入内容,一切烦恼就都没有了。
cStringIO不同之处在于,如果实例化一个带有默认数据的cStringIO.StringIO类。那么该实例是read-only的:
- import StringIO
- a = cStringIO.StringIO( 'title')
- a.write( 'content1\n')
返回AttributeError: 'cstringIO.StringI' object has no attribute ‘write’
但是如果实例化时不提供默认参数,那么则是可以读写的。注意到
- import cStringIO, StringIO
- a = StringIO.StringIO()
- b = StringIO.StringIO( 'a')
- c = cStringIO.StringIO()
- d = cStringIO.StringIO( 'a')
- print type(a)
- print type(b)
- print type(c)
- print type(d)
- print a.__class__
- print b.__class__
- print c.__class__
- 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简析相关推荐
- mysql job_MySQL数据传输中dtle 之 job 实现简析-爱可生
原标题:MySQL数据传输中dtle 之 job 实现简析-爱可生 作者:吕海龙 爱可生 DTLE 团队成员,负责 DTLE 开发 ,日常问题处理以及相关问题的排查. 本文来源:原创投稿 *爱可生开源 ...
- Python源码学习:启动流程简析
Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> Python简介: python主要是动态语言,虽然Python语言也有编译,生成中 ...
- python中if控制语句_Python 极简教程(十二)逻辑控制语句 if else
计算机软件之所以能够对不同的情况进行不同的处理,就是我们在编码的时候,通过逻辑控制语句,告诉软件在不同的情况下应该做什么处理. 比如我们在登录的时候,那么当你输入正确的账号密码和错误的账号密码,完全是 ...
- python中各种属性与方法深析
在了解类的继承之后,我们需要特别知道以下几个概念及其具体使用: (1)私有属性: (2)私有方法: (3)类属性: (4)类方法: (5)静态方法: 注意:python在类中没有声明的话,所有的方法都 ...
- Python内存管理机制及优化简析(转载)
from:http://kkpattern.github.io/2015/06/20/python-memory-optimization-zh.html 准备工作 为了方便解释Python的内存管理 ...
- python中使用StringIO出现的问题
一,在使用StringIO过程中出现的问题 1,StringIO在处理字符串时会报如下错误: TypeError: 'module' object is not callable 错误原因:与impo ...
- Python学习笔记之eval函数简析
一个最基本的eval()函数的格式应该如下: >>> command = 'print(\'Hello world!\')' >>> eval(command) H ...
- Ruby系统中的AJAX开发技术简析
一. Ajax的简短历史 在短短几个月内,Ajax从一种十分模糊稀罕的技术一下变成最热门的 东西.本文将介绍极其容易使用的Ajax支持-作为Ruby on Rails web应用程序框架的一部分实现. ...
- Style Report中报表组件的使用场景简析
报表组件,英文称呼为report bean.在诸多报表中,可以看到很多报表元素,特别是报表Bean.报表Bean是报表中的一个元素,是报表的组件:创建好的报表Bean,可以作为备用,以供其他的报表可以 ...
最新文章
- React中如何优雅的捕捉事件错误
- 正确导入svn拉取的工程
- bash命令怎么在linux系统中使用
- System.Web.HttpException: The file ~/xxx//Index.cshtml cannot be requested directly because it cal
- Vue-router(二) 子路由(嵌套路由)
- Linux 中断处理浅析
- 训练深度学习_深度学习训练tricks整理1
- 微信公众号怎么给微店设置运费
- 基于javaweb(springboot)城市地名地址信息管理系统设计和实现
- suse 网卡 bond
- 一个成功企业家立下的22条规矩
- 下载虚拟机安装linux镜像(图形化)
- JavaScript — json文件的读取与写入
- Netflix混沌工程手册Part 1:混沌工程简介
- 六轴陀螺仪简介及在智能车中的应用
- 阿里巴巴国际站新手运营攻略
- Android APP旋转屏幕
- 智能家居加速落地,景联文科技提供数据采集标注服务
- [ Arduino+Python ] 做一个串口屏,显示CPU使用率
- 2022款联想拯救者Y9000P和Y9000X的区别
热门文章
- C#MessageBox(消息提示框)使用详解
- ML之PDP:机器学习可解释性之部分依赖图(Partial Dependence Plots)之每个特征如何影响您的预测?
- 考研报名时,需要准备哪些信息?
- 大话nbu四(nbu备份恢复catalog)
- php zip解压,php解压缩zip和rar压缩包文件
- Android高德地图的定位
- 互联网直播点播平台EasyDSS登录页广告位图片上传接口报错问题分析
- PTA 数组 7-1 计算平均分并输出低于平均分的成绩
- opencv鱼眼镜头矫正
- [Axure]QQ注册页面低保真原型