python的StringIO模块

StringIO经常被用来作字符串的缓存,因为StringIO的一些接口和文件操作是一致的,也就是说同样的代码,可以同时当成文件操作或者StringIO操作。

一、StringIO中的常用方法

1、read

用法:

s.read([n]):参数n用于限定读取的长度,类型为int,默认为从当前位置读取对象s中所有的数据。读取结束后,位置被移动。

2、readline

用法:

s.readline([length]):length用于限定读取的结束位置,类型为int,缺省为None,即从当前位置读取至下一个以‘\n‘为结束符的当前行。读位置被移动。

3、readlines

用法:

s.readlines():读取所有行

4、write

用法:

s.write(s):从读写位置将参数s写入到对象s。参数为str或unicode类型,读写位置被移动。

5、writeline

用法:

s.writeline(s):从读写位置将list写入给对象s。参数list为一个列表,列表的成员为str或unicode类型。读写位置被移动

6、getvalue

用法:

s.getvalue():返回对象s中的所有数据

7、truncate

用法:

s.truncate([size]):从读写位置起切断数据,参数size限定裁剪长度,默认为None

8、tell

用法:

s.tell()  #返回当前读写位置

9、seek

用法:

s.seek(pos[,mode]):移动当前读写位置至pos处,可选参数mode为0时将读写位置移动到pos处,为1时将读写位置从当前位置移动pos个长度,为2时读写位置置于末尾处再向后移动pos个长度。默认为0

10、close

用法:

s.close():释放缓冲区,执行此函数后,数据将被释放,也不可再进行操作。

11、isatty

用法:

s.isatty():此函数总是返回0。不论StringIO对象是否已被close。

12、flush

用法:

s.flush():刷新缓冲区。

二、String使用示例

下面是一个利用StringIO缓冲及paramiko的RSAKey生成密钥对函数:

#!/usr/bin/env python
#coding: utf-8

import StringIO
import os
from paramiko import RSAKey
def gen_keys(key=""):
    """
    生成公钥 私钥
    """

    output = StringIO.StringIO()
    sbuffer = StringIO.StringIO()
    key_content = {}
    #如果私钥不存在,生成一个私钥,并将私钥缓存到output中
    if not key:
        try:
            key = RSAKey.generate(2048)
            key.write_private_key(output)
            private_key = output.getvalue()
        except IOError:
            raise IOError(‘gen_keys: there was an error writing to the file‘)
        except SSHException:
            raise SSHException(‘gen_keys: the key is invalid‘)
    #如果私钥存在,直接获取该私钥
    else:
        private_key = key
        output.write(private_key)
        print output.getvalue()
        try:
            key = RSAKey.from_private_key(output)
        except SSHException, e:
            #raise SSHException(e)
            print e
    #利用上面的私钥生成公钥
    for data in [key.get_name(),
                 " ",
                 key.get_base64(),
                 " %[email protected]%s" % ("yap", os.uname()[1])]:
        sbuffer.write(data)
    public_key = sbuffer.getvalue()
    key_content[‘public_key‘] = public_key
    key_content[‘private_key‘] = private_key
    #logger.info(‘gen_keys:   key content:%s‘ % key_content)
    return key_content

ga = gen_keys()

print ga

执行的结果输出如下:

{‘public_key‘: u‘ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDr1wB1+waFdjkhXcJ2xj5YNbYTpXTsiTuFNHptz256MNOIVHM97p8Bzzi2SUOecU7Ol8oOc+UIqqjUsu62tSpwqRAhTPizTt7uo/E6rbuiyw9mV9BYj5uyrHHdvqbh0vHNUJmI3k6HX7WSOkHrhgeLjMIil+0oSAvtlmEtXxQAAkupOy0pM95vRJFtWPv9+ehf66FKBXjytAmIUQjVD63zXJzGza5/8oa/OmIhqtc7kN+cmgZsNCq1xiDYMUy+3CayCDcSMAb9HtOVrxApNLiJJ0QQlrgNy4bDLtg0g5EVVBAnFqmVjVWq7nPtqKFfPigSUAnAxECGdEtu2XJplOET [email protected]‘, ‘private_key‘: u‘-----BEGIN RSA PRIVATE KEY-----\nMIIEpgIBAAKCAQEA69cAdfsGhXY5IV3CdsY+WDW2E6V07Ik7hTR6bc9uejDTiFRz\nPe6fAc84tklDnnFOzpfKDnPlCKqo1LLutrUqcKkQIUz4s07e7qPxOq27ossPZlfQ\nWI+bsqxx3b6m4dLxzVCZiN5Oh1+1kjpB64YHi4zCIpftKEgL7ZZhLV8UAAJLqTst\nKTPeb0SRbVj7/fnoX+uhSgV48rQJiFEI1Q+t81ycxs2uf/KGvzpiIarXO5DfnJoG\nbDQqtcYg2DFMvtwmsgg3EjAG/R7Tla8QKTS4iSdEEJa4DcuGwy7YNIORFVQQJxap\nlY1Vqu5z7aihXz4oElAJwMRAhnRLbtlyaZThEwIDAQABAoIBAQDZJS8hci4A+GeF\n10RUBBgnM90fnbpYh8qrzTPko5c/HnHGFqu9HFZ/XgMDo9WEryM2iP/b6s24+xlU\nLiQpSgl3jdJyNuLOhhIxe/WCZ7BaJclaHASTZjaffrOgzgft6UIGHu4e3UFE19Tg\nfI9xggi0brfZDjWoXx3MdienlOFfVvkiJc0YB8fawHvSmbKbzu/M58wP4zZKv/wP\nIHyxH10CkTAHP2/KvQ00kKheFdx6IY3VF44u5UsM4ZvaCqkzaVqDgHkaUqBLBdug\nxMhE1etOnODm+f6qrk4BsZxsTORiheJyT97QS8KOzZV7ouBcoOzz8gB0Tglz+wT4\nHgOnVAHxAoGBAPvGxlvSaq0uKNRIPv+eyyHu2HDw/ehHo3T7HTFh4g/KjCNRVNAR\nTrAFhVn/bwFyuCxVMPeA3Zo+ZTBue5VA979rv22JFg4tM/vrkDAz1h+EvY+tp4Nv\naNHie6nQY6jJgPQybG/9UwVwk2nlmtwJtNvTHwsd/8Kzljp342dja1gfAoGBAO/L\nyfwNlRYxiXj2rqmt7NcSqhcFf4Qv3s3UMaUPMOr7jgAsQfMigDO/bTYGmOMqVrGa\ny3YnbCROxE2wjqE1vf4F+yWv+xEqX/3cd/rFyPb15x9+KtbkD11A4xzAURVYakpO\n6w/1TAbBFFDVVm15cHJ3ymJd6PGm5XYMvw+6P6iNAoGBAM2DoHBdHlSERDGbU0km\nXhsxshzmqesLZuJbA6ZGhtdq9t7xSXCZYAiQSRyAQyUEdk9Brrmox7payhAxbtES\n+eeXVOddKdKilTdCPi0KcvLBUFZSYlUIAKCp5VVk06R37rnl2tvDBRyAmuOq1rBb\nf/SbrVBOyXEtVCgfqlC/N2TzAoGBAMZa2VrA1XkFQwUncLV05DvH+aCPcLqkanXy\nN5qkpT9LFFw6P9dhy5CCoVEWRfNq+0lwlSrIU2D5MtJc4K6jaOSuh9/V4SWC2uKA\nM1LhtmnqYOOhFsio37iwyuzmfGvethV/kFuj+d6AalCvGA34bTaStnuF2QHDn311\n77mPw8alAoGBAK5cGdvlcPE1u/l9DMthjZjYwKp3dBm5sbBOiri+0l+ML5Aje+B+\nOJtKp1F4wqz4iA9SadeYJjBAqpnIXz405I5RcmDH2y1845k7gzN++6PEp+kbSmQV\n5DTiUiRtx9G7Woaz+L9ircyuuLkzJRrwTwQWeaMkaYt/OPpP8ERV+Aha\n-----END RSA PRIVATE KEY-----\n‘}
时间: 2024-10-11 08:11:37

python的StringIO模块的相关文章

Python的StringIO模块和cStringIO模块

1.StringIO模块 StringIO用于像文件一样对字符串缓冲区或者叫做内存文件进行读写. f = StringIO()      # ready for writing f = StringIO(buf)   # ready for reading f.close()           # explicitly release resources held flag = f.isatty()   # always false pos = f.tell()      # get curr

基于Python的urllib2模块的多线程网络爬虫程序

1 m Queue import Queue 2 from gzip import GzipFile 3 from StringIO import StringIO 4 import time 5 import socket 6 class ContentEncodingProcessor(urllib2.BaseHandler): 7 """A handler to add gzip capabilities to urllib2 requests ""

Python中pickle模块的使用方法详解

python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象.本文和大家分享的就是python开发中pickle模块的相关使用,一起来看看吧. 基本接口: pickle.dump(obj, file, [,protocol]) 注解:将对象obj保存到文件file中去. protocol为序列化使用的协议版本,0:ASCII协议,所

Python进阶之模块

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Module). 使用模块有什么好处? 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序的时候,也经常引用其他模块,包括Python内置的模

加密&json&StringIO模块&BytesIO模块

一.加密 加密 md5 rsa hashlib (适用于python2) 案例一:import hashlib# m = hashlib.md5()# src = "123456"# m.update(src)# print(m.hexdigest()) m3 = hashlib.md5("123456".encode("utf-8"))src = bytes("ling", encoding="utf-8"

python进阶二(模块)【2-1 python之导入模块】

python之导入模块 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 math: 你可以认为math就是一个指向已导入模块的变量,通过该变量,我们可以访问math模块中所定义的所有公开的函数.变量和类: >>> math.pow(2, 0.5) # pow是函数 1.4142135623730951 >>> math.pi # pi是变量 3.141592653589793 如果我们只希望导入用到的mat

Python中subprocess 模块 创建并运行一个进程

python的subprocess模块,看到官方声明里说要尽力避免使用shell=True这个参数,于是测试了一下: from subprocess import call import shlex cmd = "cat test.txt; rm test.txt" call(cmd, shell=True) 运行之后: 1:打开并浏览了test.txt文件 2:删除了test.txt文件 from subprocess import call import shlex cmd = &

python时间处理模块 datetime time模块 deltetime模块

1 首先介绍time模块,因为简单 python 自带模块 本人使用time模块,只使用两个函数 time函数和sleep函数 import time a.     time.time()   函数 返回unix时间  常用作两个时间差的计算 b.     time.sleep()  休眠多久,精度为子秒(subsecond) In [90]: t1 = time.time() In [91]: t1 Out[91]: 1461400225.877932 In [92]: time.sleep(

python安装mysqldb模块

今天在阿里云一台新的服务器部署程序后台,发现上面的python缺少MySQLDB 模块,记录安装过程. 首先django程序,运行 python manage.py sycdb 报错: ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb MySQLdb模块的包名字叫mysql-python,于是pip安装之,(关于pip,可以参考这篇文章) 运行: pip install mysql-python