将数据写入到内存 | 学习笔记

简介: 快速学习将数据写入到内存,介绍了将数据写入到内存系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【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 可以都打印出来,然后打印到内存中缓存起来。这就是我们写的最基本的代码过程。

相关文章
|
2月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
|
4天前
|
缓存 NoSQL 算法
14)Redis 在内存用完时会怎么办?如何处理已过期的数据?
14)Redis 在内存用完时会怎么办?如何处理已过期的数据?
9 0
|
5天前
|
存储 弹性计算 网络协议
阿里云ECS内存型实例规格族特点、适用场景、指标数据参考
阿里云ECS提供了多样化的内存型实例规格族,专为需要高性能内存资源的应用场景设计。从最新的r8a系列到经过优化的re6p系列,旨在提供稳定、高效且安全的计算环境。这些实例不仅具备强大的计算性能与内存配比,还通过支持ESSD云盘和高效网络协议,显著提升了存储I/O能力和网络带宽,适用于大数据分析、高性能数据库、内存密集型应用等多种场景,为用户带来卓越的计算体验。本文将详细解析阿里云ECS中的多个内存型实例规格族,包括它们的核心特点、适用场景、实例规格及具体指标数据,为用户在云计算资源选型时提供参考。
|
2月前
|
编译器 C++
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
|
2月前
|
存储 算法 大数据
小米教你:2GB内存搞定20亿数据的高效算法
你好,我是小米。本文介绍如何在2GB内存中找出20亿个整数里出现次数最多的数。通过将数据用哈希函数分至16个小文件,每份独立计数后选出频次最高的数,最终比对得出结果。这种方法有效解决大数据下的内存限制问题,并可应用于更广泛的场景。欢迎关注我的公众号“软件求生”,获取更多技术分享!
150 12
|
2月前
内存的数据
va的ava的va的ava的内存需要划分成为5个部分: 1.栈(Stack)存放的都是方法中的局部变量。方法的运行一定要在栈当中运行。 2.堆(Heap)凡是new出来的东西,都是在堆当中 堆内存的东西都有一个地址值:16进制 堆内存的数据,都有默认值。规则: 整数 默认是0 浮点 默认0.0 字符 默认'\u0000'
32 3
|
2月前
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
40 0
|
3月前
|
缓存 NoSQL Redis
Redis性能优化问题之当Redis内存达到maxmemory后,淘汰数据的逻辑是怎样的
Redis性能优化问题之当Redis内存达到maxmemory后,淘汰数据的逻辑是怎样的
|
2月前
|
C++ 容器
curl使用小记(三)——获取远端数据到内存缓冲区
curl使用小记(三)——获取远端数据到内存缓冲区
43 0
|
2月前
|
存储 编译器 C语言
数据在内存中的存储
数据在内存中的存储

热门文章

最新文章

下一篇
无影云桌面