Python入門篇-StringIO和BytesIO
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
一.StringIO(用於文本處理)
1>.使用案例
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 """ 8 io模塊中的類 9 from io import StringIO 10 內存中,開辟的一個文本模式的buffer,可以像文件對象一樣操作它 11 當close方法被調用的時候,這個buffer會被釋放 12 """ 13 14 from io import StringIO 15 16 sio = StringIO() #內存中構建,像文件對象一樣操作 17 print(sio.readable(), sio.writable(), sio.seekable()) 18 19 sio.write("https://www.cnblogs.com/yinzhengjie\nPython") 20 sio.seek(0) 21 print(sio.readline()) 22 23 print(sio.getvalue()) #獲取全部內容。跟文件指針沒有關系,即無視指針,輸出全部內容 24 25 sio.close() 26 27 28 #以上代碼執行結果如下: 29 True True True 30 https://www.cnblogs.com/yinzhengjie 31 32 https://www.cnblogs.com/yinzhengjie 33 Python
2>.StringIO優缺點
優點:
一般來說,磁盤的操作比內存的操作要慢得多,內存足夠的情況下,一般的優化思路是少落地,減少磁盤IO的過程,可以大大提高程序的運行效率。
缺點:
如果機器重啟或者掉電之類的故障發生,內存的數據都將不會存在啦!因此這種方法一般對數據並不太銘感的操作。
二.BytesIO(用於二進制處理)
1>.使用案例
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com """ io模塊中的類 from io import StringIO 內存中,開辟的一個文本模式的buffer,可以像文件對象一樣操作它 當close方法被調用的時候,這個buffer會被釋放 """ from io import StringIO sio = StringIO() #內存中構建,像文件對象一樣操作 print(sio.readable(), sio.writable(), sio.seekable()) sio.write("https://www.cnblogs.com/yinzhengjie\nPython") sio.seek(0) print(sio.readline()) print(sio.getvalue()) #獲取全部內容。跟文件指針沒有關系,即無視指針,輸出全部內容 sio.close() #以上代碼執行結果如下: True True True b'https://www.cnblogs.com/yinzhengjie\n' b'https://www.cnblogs.com/yinzhengjie\nPython'
2>.BytesIO優缺點
優點:
和StringIO思路一樣,一般來說,磁盤的操作比內存的操作要慢得多,內存足夠的情況下,一般的優化思路是少落地,減少磁盤IO的過程,可以大大提高程序的運行效率。
缺點:
和StringIO思路一樣,如果機器重啟或者掉電之類的故障發生,內存的數據都將不會存在啦!因此這種方法一般對數據並不太銘感的操作。
三.file-like對象
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 """ 8 file-like對象: 9 類文件對象,可以像文件對象一樣操作 10 socket對象、輸入輸出對象(stdin、stdout)都是類文件對象 11 """ 12 13 from sys import stdout 14 15 f = stdout #引用標准輸出 16 17 print(type(f)) 18 19 f.write('https://www.cnblogs.com/yinzhengjie\nPython') #調用標准輸出對象 20 21 22 23 #以上代碼輸出結果如下: 24 <class '_io.TextIOWrapper'> 25 https://www.cnblogs.com/yinzhengjie 26 Python

#!/usr/bin/env python #_*_conding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie import sys f = sys.stderr print(f.seekable(),f.readable(),f.writable(),file=f) sys.stdout.write("尹正傑到此一游!\n") #以上代碼執行結果如下: True False True 尹正傑到此一游!