技术标签: 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()
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...
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
执行这个语句就行了:mvn clean package -Dmaven.test.skip=true这特么的 一个劲找错
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. 两数之和题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = ...
iphone5s数据线未连接至计算机,因此没有解决方案. 您可以尝试使用下面提供的Apple 5s数据线. 解决方案未连接到计算机. 许多水果迷遇到同样的问题. 数据线是否断裂?让我们看看下面怎么说.1. Apple 5s iOS7系统具有检测数据线的功能,并且该数据线也与上一代Apple 5不同. 可能存在这种情况. 有些朋友有多部Apple手机,并且数据线可能混合在一起. 结果,计算机无法识...
在工作中往往会运用服务器运行程序,但往往因为服务器无法直接控制,所以需要远程控制服务器进行代码调试。Python语言往往通过Pycharm来进行程序的编写和调试。Pycharm的本地用法本文不做介绍,Pycharm也有远程服务器的方法,现介绍如下:一、pycharm远程服务器的步骤第一步:打开Pycharm界面,按照下图进行选择第二步:选择完Configuration后会出现如下界面,如果之前没有进行远程服务器设置,可以选择“+”号后选择SFTP,进行远程服务器的设置。第三步:在选择后的界面中进
全文6000余字,需要一定的阅读时间,建议先收藏再阅读。目录:一、风云再起二、三字诀三、众生世界一“佛”字四、自我世界一“慢”字五、对方世界一“你”字六、谁能挑战张小龙...
一、确保你有管理员权限。如果你还不是管理员,请让当前管理员编辑gitosis-admin项目下的gitosis.conf文件,在[group gitosis-admin]下的members行里添加你的名字。二、把gitosis-admin项目clone下来三、现在我们来添加一个新项目。为此我们要建立一个名为 mobile 的新段落,在其中罗列手机开发团队的开发者,以及他
现在35岁以上的程序员出去找工作,几乎很难获得面试机会。即使你参加面试了,跟比你小十来岁的小年轻比较,可能hr也会选择更年轻的,因为在他们身上会有更高的性价比。
TSP_旅行商问题 - 贪心算法问题描述:代码:1.
问题描述:项目是一个Maven+SpringBoot项目,在Eclipse中运行正常,没有问题,但是用IDEA编辑的时候根本启动不了,报错一大堆,比如找不到HttpServletRequest类,找不到Hibernate的类,和找不到Tomcat初始化类,等等奇葩问题。具体看下面截图:解决了很久没有找到原因,网上查了很多也没有真正解决问题。无意间看到一个博文,说了这个问题,瞬间