#coding=utf-8'''Created on 2017年3月5日@author: zxt'''import StringIO# StringIO還有一個對應的c語言版的實現,它有更好的性能,但是稍有一點點的區別:# cStringIO沒有len和pos屬性。(還有,cStringIO不支持Unicode編碼)# 如果實例化一個帶有默認數據的cStringIO.StringIO類。那么該實例是read-only的;# 無默認參數的是cStringIO.StringO,它是可讀寫的。cs = cStringIO.StringO()# StringIO模塊主要用于在內存緩沖區中讀寫數據。模塊是用類編寫的,只有一個StringIO類,# 所以它的可用方法都在類中。此類中的大部分函數都與對文件的操作方法類似。s = StringIO.StringIO()s.write("www.baidu.com/r/n")s.write("news.realsil.com.cn")# getvalue() 方法用于獲取寫入后的strPRint(s.getvalue())# 也可以像讀取文件一樣讀取StringIO中的數據s.seek(0)while True: strBuf = s.readline() if strBuf == "": break print(strBuf.strip()) s.close()# 可以用一個str初始化StringIOss = StringIO.StringIO("Hello!/nGoodBay!")print(ss.read())ss.close()# StringIO 模塊中的函數:# s.read([n])# 參數n限定讀取長度,int類型;缺省狀態為從當前讀寫位置讀取對象s中存儲的所有數據。讀取結束后,讀寫位置被移動。# # ----------------------# s.readline([length])# 參數length限定讀取的結束位置,int類型,缺省狀態為None:從當前讀寫位置讀取至下一個以“/n”為結束符的當前行。讀寫位置被移動。# # ----------------------# # s.readlines([sizehint])# 參數sizehint為int類型,缺省狀態為讀取所有行并作為列表返回,除此之外從當前讀寫位置讀取至下一個以“/n”為結束符的當前行。讀寫位置被移動。# # ----------------------# s.write(s)# 從讀寫位置將參數s寫入給對象s。參數s為str或unicode類型。讀寫位置被移動。# # ----------------------# s.writelines(list)# 從讀寫位置將list寫入給對象s。參數list為一個列表,列表的成員為str或unicode類型。讀寫位置被移動。# # ----------------------# s.getvalue()# 此函數沒有參數,返回對象s中的所有數據。# # ----------------------# s.truncate([size])# 從讀寫位置起切斷數據,參數size限定裁剪長度,缺省值為None。# # ----------------------# s.tell()# 返回當前讀寫位置。# # ----------------------# s.seek(pos[,mode])# 移動當前讀寫位置至pos處,可選參數mode為0時將讀寫位置移動至pos處,為1時將讀寫位置從當前位置起向后移動pos個長度,# 為2時將讀寫位置置于末尾處再向后移動pos個長度;默認為0。# # ----------------------# s.close()# 釋放緩沖區,執行此函數后,數據將被釋放,也不可再進行操作。# # ----------------------# s.isatty()# 此函數總是返回0。不論StringIO對象是否已被close()。# # ----------------------# s.flush()# 刷新內部緩沖區。from io import BytesIO# StringIO操作的只能是str,如果要操作二進制數據,就需要使用BytesIO。b = BytesIO()b.write("hello".encode("utf-8"))print(b.getvalue())b.close()
新聞熱點
疑難解答