模塊是用類編寫的,只有一個StringIO類,所以它的可用方法都在類中。
此類中的大部分函數都與對文件的操作方法類似。
例:
通過例子,我們看到了StringIO的行為,基本與file一致。StringIO提供了一個方法,可以方便的獲取其中的數據:StringIO. getvalue()。如果使用read方法獲取其中的數據,必須通過seek先設置"文件指針"的位置。
Python標準模塊中還提供了一個cStringIO模塊,它的行為與StringIO基本一致,但運行效率方面比StringIO更好。但使用 cStringIO模塊時,有幾個注意點: 1. cStringIO.StringIO不能作為基類被繼承;2. 創建cStringIO.StringIO對象時,如果初始化函數提供了初始化數據,新生成的對象是只讀的。所以下面的代碼是錯誤的:s = cStringIO.StringIO("JGood/n"); s.write("OOOKKK");
----------------------
=====================================================
StringIO經常被用來作為字符串的緩存,應為StringIO有個好處,他的有些接口和文件操作是一致的,也就是說用同樣的代碼,可以同時當成文件操作或者StringIO操作。比如:
def writedata(fd, msg):
fd.write(msg)
f = open('aaa.txt', 'w')
writedata(f, "xxxxxxxxxxxx")
f.close()
s = StringIO.StringIO()
writedata(s, "xxxxxxxxxxxxxx")
因為文件對象和StringIO大部分的方法都是一樣的,比如read, readline, readlines, write, writelines都是有的,這樣,StringIO就可以非常方便的作為"內存文件對象"。
s = StringIO.StringIO()
s.write("aaaa")
lines = ['xxxxx', 'bbbbbbb']
s.writelines(lines)
s.seek(0)
print s.read()
print s.getvalue()
s.write(" ttttttttt ")
s.seek(0)
print s.readlines()
print s.len
新聞熱點
疑難解答
圖片精選