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

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

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

相关文章
|
16天前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
|
15天前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
30 1
|
19天前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
21天前
|
监控 Java easyexcel
面试官:POI大量数据读取内存溢出?如何解决?
【10月更文挑战第14天】 在处理大量数据时,使用Apache POI库读取Excel文件可能会导致内存溢出的问题。这是因为POI在读取Excel文件时,会将整个文档加载到内存中,如果文件过大,就会消耗大量内存。以下是一些解决这一问题的策略:
52 1
|
24天前
|
缓存 安全 Java
使用 Java 内存模型解决多线程中的数据竞争问题
【10月更文挑战第11天】在 Java 多线程编程中,数据竞争是一个常见问题。通过使用 `synchronized` 关键字、`volatile` 关键字、原子类、显式锁、避免共享可变数据、合理设计数据结构、遵循线程安全原则和使用线程池等方法,可以有效解决数据竞争问题,确保程序的正确性和稳定性。
34 2
|
29天前
|
存储 编译器
数据在内存中的存储
数据在内存中的存储
37 4
|
1月前
|
存储 机器学习/深度学习 人工智能
数据在内存中的存储
数据在内存中的存储
|
29天前
|
存储 C语言
深入C语言内存:数据在内存中的存储
深入C语言内存:数据在内存中的存储
|
2月前
|
缓存 NoSQL 算法
14)Redis 在内存用完时会怎么办?如何处理已过期的数据?
14)Redis 在内存用完时会怎么办?如何处理已过期的数据?
55 0
|
2月前
|
存储 弹性计算 网络协议
阿里云ECS内存型实例规格族特点、适用场景、指标数据参考
阿里云ECS提供了多样化的内存型实例规格族,专为需要高性能内存资源的应用场景设计。从最新的r8a系列到经过优化的re6p系列,旨在提供稳定、高效且安全的计算环境。这些实例不仅具备强大的计算性能与内存配比,还通过支持ESSD云盘和高效网络协议,显著提升了存储I/O能力和网络带宽,适用于大数据分析、高性能数据库、内存密集型应用等多种场景,为用户带来卓越的计算体验。本文将详细解析阿里云ECS中的多个内存型实例规格族,包括它们的核心特点、适用场景、实例规格及具体指标数据,为用户在云计算资源选型时提供参考。