Python入門篇-StringIO和BytesIO


              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
尹正傑到此一游!
stderr使用案例

 


免責聲明!

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



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