开发者学堂课程【Python 入门 2020年版:将数据写入到内存】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10403
将数据写入到内存
内容简介:
一、StringIO
二、BytesIO
注意:分隔符的逗号要用英文逗号,不能使用中文逗号。
除了将数据写入到一个文件以外,我们还可以使用代码,将数据暂时写入到内存里,暂时保存,可以理解为数据缓冲区。
Python 中提供了 StringlO 和 BytesIO 这两个类将字符串数据和二进制数据写入到内存里。
一、StringIO
StringlO 可以将字符串写入到内存中,像操作文件一下操作字符串。
from io import Stringio
s_io = stringio()
s_io.write( ' hello')
s_io.write( 'good’)
#作用就是把括号内的数据写入到了内存里缓存起来
print(s_io.getvalue())
#以上就是数据的缓存,要用 getvalue 替换 read,因为没拿到数据所以read是读不到的,在 write 写进数据时可以用 getvalue 将数据读取出来。
#之前打印的时候可以直接使用 print('字符串‘),将内容打印到控制台里边,如果当打印内容不断地增加时打印格式就可以是下面两种:
第一种
s =’ ‘
s +='hello '
s+=' word '
print(s)
第二种
print( ‘hello’,file='sss.txt’)
#这一句代码是一个错误示范,file 需要的是一个文件流对象,file 指打印后储存的位置
print( ‘hello', file=open( ‘sss.txt ', 'w'))
#要标注以“w”的形式打开这个文件,这样“hello”就被打印进了 sss.txt 文件中
print( " hello', file=s-io)
有时候也会出现,不将数据打印到文件里边,暂时的打入到对象里边,file=s-io可以接收输入,作用是将打印的内容全部存入内存里,需要使用时再用print(s_io.getvalue())
将数据拿出来用。
有一个simple-server文件中就有file=s-io这个功能:
if _name_ == '_main_':
如果直接运行它就会执行下面的代码,如果导入这个模块,是不能够直接运行的,若直接在这个文件中点击运行是可以运行的。
with make_server( ' " , 800o,demo_app) as httpd:
sa = httpd.socket.getsockname()
print( "serving HTTP on", sa[o],"port", sa[1], "...")
import webbrowser
webbrowser.open( " http:// localhost:800日/xyz?abc ')
httpd.handle_request()# serve one request,then exit
StringIO 中导入该模块(帮助打开浏览器)是不能直接运行的,直接运行文件是可以的
点击 demo_app,该模块原理:
def demo_app(environ,start_response) :
from io import Stringio
stdout = stringIo()
#使用了stringIo
print("Hello world! ",file=stdout)
#先打印出 Hello world!,放入 stdout 中,stdout 就是 stringIo,相当于上面写的 s-io
print(file=stdout)
#没有打印内容,操作作用就是打印了换行
h = sorted(environ.items())
for k,v in h:
print(k, '=' ,repr(v), file=stdout)
#repr()将内容转换成字符串输出
start_response("200 oK",[( 'content-Type' , ' text/plain; charset=utf-8')])
#将内存里边的 k,v 打印出来
return [stdout.getvalue( ).encode( "utf-8")]
#用 Stringio 先打印 Hello world!,储存到内存里,再将 k,v 同样打印出来,最后将所有的值从内存中拿出来,放到浏览器的界面上显示。
二、BytesIO
bytesio 它的用法跟 stringio 基本上是一样的,如果想要以二进制的形式写入数据,可以使用 ByteslO 类,它的用法和 StringlO 相似,只不过在调用 write 方法写入时,需要传入二进制数据。
b_io = BytesIo()
#使用类创建一个对象
b_io.write( '你好'.encode( ' utf8 ' ))
#b_io.write()中只能写入二进制,不能写入字符串
print(b_io.getvalue( ).decode( ‘utf8'))
#拿到的数据是二进制形式,可以用 decode( ‘utf8')转换成文本形式
这两种类有各种各样的用处,但用的也不多,作为一个了解让大家知道,它们可以把数据放到内存里面。
有一些地方用这两个类,会让你的代码更加简单、方便。如果不用这两个类,显示界面上就会打印密密麻麻的大堆内容,要用字符串拼接。用 stringio 可以都打印出来,然后打印到内存中缓存起来。这就是我们写的最基本的代码过程。