python 的内存级别的IO操作

可以像操作文件一样 操作内存的buffer

  • StringIO
  • BytesIO

标志位 内存寻址

  • 内存中的对象有一个标志位的概念,往里面写入,标志位后移到下一个空白处。
  • 而读数据的时候是从标志位开始读,所以想要读取前面的数据需要手动将标志位进行移动。

字符串缓冲 需要显示关闭缓冲区

  • 类似java BufferedReader 字符输入流

In [1]: from io import StringIO                                                                                                                                              

In [2]: s=StringIO()                                                                                                                                                         

In [3]: type(s)                                                                                                                                                              
Out[3]: _io.StringIO


In [6]: s.write('this\nis\na\ngreat\nworld!')                                                                                                                                
Out[6]: 22

In [7]: s.read()                                                                                                                                                             
Out[7]: ''


In [11]: s.seek(0)                                                                                                                                                           
Out[11]: 0

In [12]: s.read()                                                                                                                                                            
Out[12]: 'this\nis\na\ngreat\nworld!'

In [13]: s.read()                                                                                                                                                            
Out[13]: ''

In [14]: s.getvalue()                                                                                                                                                        
Out[14]: 'this\nis\na\ngreat\nworld!'

In [15]: s.seek(0)                                                                                                                                                           
Out[15]: 0

In [16]: s.readline()                                                                                                                                                        
Out[16]: 'this\n'

In [17]: s.readline().strip()                                                                                                                                                
Out[17]: 'is'

In [18]: s.seek(0)                                                                                                                                                           
Out[18]: 0

In [19]: s.readlines()                                                                                                                                                       
Out[19]: ['this\n', 'is\n', 'a\n', 'great\n', 'world!']

In [20]: s.close()

字节缓冲 需要显示关闭缓冲区

  • 类似java BufferedInputStream 字节输入流
In [1]: from io import BytesIO                                                                                                                                               

In [2]: b=BytesIO()                                                                                                                                                          

In [3]: b.write('小付'.encode('utf-8'))                                                                                                                                      
Out[3]: 6

In [4]: b.getvalue()                                                                                                                                                         
Out[4]: b'\xe5\xb0\x8f\xe4\xbb\x98'

In [7]: response=requests.get('https://img.zcool.cn/community/0170cb554b9200000001bf723782e6.jpg@1280w_1l_2o_100sh.jpg')                                                     

In [8]: type(response.content)                                                                                                                                               
Out[8]: bytes

In [12]: img=BytesIO(response.content)

In [13]: from PIL import Image                                                                                                                                               

In [14]: pic=Image.open(img)                                                                                                                                                 

In [15]: pic.format                                                                                                                                                          
Out[15]: 'JPEG'

In [16]: pic.size                                                                                                                                                            
Out[16]: (800, 586)

posted @ 2024-08-21 11:10  vx_guanchaoguo0  阅读(4)  评论(0编辑  收藏  举报