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(),
                 " %s@%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 yap@mysoft-ci', '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'}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM