python中io中的+模式_python-二进制流中的open和io.BytesIO之间的区别_weixin_39940182的博客-程序员秘密

技术标签: python中io中的+模式  

为了简单起见,让我们考虑现在写而不是读。

因此,当您使用f.close()时,例如:

with open("test.dat", "wb") as f:

f.write(b"Hello World")

f.write(b"Hello World")

f.write(b"Hello World")

执行完之后,将创建一个名为f.close()的文件,其中包含myfile.jpg。将数据写入文件后,该数据将不会保存在内存中(除非按名称保存)。

现在,当您考虑使用f.close()时:

with io.BytesIO() as f:

f.write(b"Hello World")

f.write(b"Hello World")

f.write(b"Hello World")

它不是将内容写入文件,而是写入内存缓冲区。 换句话说,一块RAM。 本质上,编写以下内容将是等效的:

buffer = b""

buffer += b"Hello World"

buffer += b"Hello World"

buffer += b"Hello World"

对于带有with语句的示例,最后还有一个f.close()。

这里的主要区别是优化和性能。 f.close()能够进行一些优化,使其比简单地将所有myfile.jpg一对一地串联起来更快。

为了证明这一点,这里有一个小基准:

Concat:1.3529秒

字节IO:0.0090秒

import io

import time

begin = time.time()

buffer = b""

for i in range(0, 50000):

buffer += b"Hello World"

end = time.time()

seconds = end - begin

print("Concat:", seconds)

begin = time.time()

buffer = io.BytesIO()

for i in range(0, 50000):

buffer.write(b"Hello World")

end = time.time()

seconds = end - begin

print("BytesIO:", seconds)

除了提高性能外,使用f.close()代替串联还有一个优点,就是可以使用myfile.jpg代替文件对象。 假设您有一个函数期望文件对象写入。 然后,您可以为它提供内存中的缓冲区,而不是文件。

区别在于f.close()只是加载并返回myfile.jpg的内容; 而BytesIO同样只是一个包含某些数据的缓冲区。

由于f.close()只是一个缓冲区-如果您想稍后将内容写入文件中,则必须执行以下操作:

buffer = io.BytesIO()

# ...

with open("test.dat", "wb") as f:

f.write(buffer.getvalue())

另外,您没有提到版本; 我正在使用Python3。与示例相关:我在使用with语句,而不是调用f.close()

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39940182/article/details/111078941

智能推荐

Windows 下Qt Creator 安装 Qwt_qt creator安装qwt_Allenhong97的博客-程序员秘密

Windows 下Qt Creator 安装 Qwt花了一个晚上的时间装Qwt,总结一下经验:下载QWTQWT编译QWT配置QWT_Test到以下网站下载这三个文件:qwt-6.1.2.zip,qwt-6.1.2.pdf,qwt-6.1.2.qchQWT下载路径解压zip文件,进入解压后的文件,双击qwt.pro文件,使用Qt Creator 进行编译(debug与r...

weui组件通过useExtendedLib扩展库的方式引入并使用---微信小程序_code 浩铭的博客-程序员秘密

1.app.ison中存在如下内容{ "useExtendedLib": { "weui": true }}2.每个page页面所对应的.json文件中存在对应的usingComponents, 如下{ "usingComponents": { "mp-dialog": "weui-miniprogram/dialog/dialog" }}3.在对应的wxml中调用即可<mp-dialog title="test" show="{{t

springboot打包 出错 Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1_慢慢走不跑的博客-程序员秘密

执行这个语句就行了:mvn clean package -Dmaven.test.skip=true这特么的 一个劲找错

11_信号SIGINT,SIGCHLD_驴驴l的博客-程序员秘密

11_信号SIGINT,SIGCHLD文章目录11_信号SIGINT,SIGCHLD1.SIGINT 举例1.1(signal和信号^C)1.2(运行./mykill 进程号 快捷键说明号)2.SIGCHLD 举例11_信号SIGINT,SIGCHLD名代号意义SIGINT2代表^C,提前终止SIGCHLD17代表子进程结束时1.SIGINT 举例1.1(signal和信号^C)vi main.c:行号注释22默认^C功能,提前.

leetcode 热题 Hot 100-1. 两数之和_leetcode100热题_快乐划水程序猿的博客-程序员秘密

leetcode 热题 Hot 100-1. 两数之和题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = ...

5s获取的计算机找不到,如果iphone5s数据线未连接到计算机,该怎么办? Apple 5s数据线无法连接到计算机解决方案..._zodiacLavigne的博客-程序员秘密

iphone5s数据线未连接至计算机,因此没有解决方案. 您可以尝试使用下面提供的Apple 5s数据线. 解决方案未连接到计算机. 许多水果迷遇到同样的问题. 数据线是否断裂?让我们看看下面怎么说.1. Apple 5s iOS7系统具有检测数据线的功能,并且该数据线也与上一代Apple 5不同. 可能存在这种情况. 有些朋友有多部Apple手机,并且数据线可能混合在一起. 结果,计算机无法识...

随便推点

pycharm远程服务器方法介绍以及can‘t run remote python interpreter问题解决办法_一个新新的小白的博客-程序员秘密

在工作中往往会运用服务器运行程序,但往往因为服务器无法直接控制,所以需要远程控制服务器进行代码调试。Python语言往往通过Pycharm来进行程序的编写和调试。Pycharm的本地用法本文不做介绍,Pycharm也有远程服务器的方法,现介绍如下:一、pycharm远程服务器的步骤第一步:打开Pycharm界面,按照下图进行选择第二步:选择完Configuration后会出现如下界面,如果之前没有进行远程服务器设置,可以选择“+”号后选择SFTP,进行远程服务器的设置。第三步:在选择后的界面中进

【深度解局】佛慢你:张小龙的微信成功三字诀_blockcoach的博客-程序员秘密

全文6000余字,需要一定的阅读时间,建议先收藏再阅读。目录:一、风云再起二、三字诀三、众生世界一“佛”字四、自我世界一“慢”字五、对方世界一“你”字六、谁能挑战张小龙...

【git】在git远程仓库中创建一个新项目并把本地代码提交上去_长城Great的博客-程序员秘密

一、确保你有管理员权限。如果你还不是管理员,请让当前管理员编辑gitosis-admin项目下的gitosis.conf文件,在[group gitosis-admin]下的members行里添加你的名字。二、把gitosis-admin项目clone下来三、现在我们来添加一个新项目。为此我们要建立一个名为 mobile 的新段落,在其中罗列手机开发团队的开发者,以及他

程序员35岁以后干什么?_前端开发35岁以后干什么_测试萌萌的博客-程序员秘密

现在35岁以上的程序员出去找工作,几乎很难获得面试机会。即使你参加面试了,跟比你小十来岁的小年轻比较,可能hr也会选择更年轻的,因为在他们身上会有更高的性价比。

TSP_旅行商问题 _贪心算法_1753942680的博客-程序员秘密

TSP_旅行商问题 - 贪心算法问题描述:代码:1.

SpringBoot找不到类异常解决_soaf boot找不到自己写的类_vsalw的博客-程序员秘密

问题描述:项目是一个Maven+SpringBoot项目,在Eclipse中运行正常,没有问题,但是用IDEA编辑的时候根本启动不了,报错一大堆,比如找不到HttpServletRequest类,找不到Hibernate的类,和找不到Tomcat初始化类,等等奇葩问题。具体看下面截图:解决了很久没有找到原因,网上查了很多也没有真正解决问题。无意间看到一个博文,说了这个问题,瞬间

推荐文章

热门文章

相关标签