[英]shutil.move() slower than os.remove() + os.rename()
So, I noticed that when I want to move a file 'a' and overwrite the destination 'b' os.remove('b') and then os.rename('a','b') is a lot faster than shutil.move('a','b'). 因此,我注意到,当我想移动文件'a'并覆盖目标位置'b'时,os.remove('b')然后os.rename('a','b')的速度比shutil快得多.move('a','b')。
If the destination is on the current filesystem, then os.rename() is used.
如果目标位于当前文件系统上,则使用os.rename()。 Otherwise, src is copied (using shutil.copy2()) to dst and then removed.
否则,将src复制(使用shutil.copy2())到dst,然后将其删除。 In case of symlinks, a new symlink pointing to the target of src will be created in or as dst and src will be removed.
对于符号链接,将在dst中或作为dst创建指向src目标的新符号链接,并删除src。
but why doesn't it use os.remove() also? 但是为什么它还不使用os.remove()?
Example (1st time using timeit, sorry if I have any mistakes): 示例(第一次使用timeit,如果有任何错误,请抱歉):
import os,timeit
os.chdir('c:\python')
def myMove(a,b):
os.remove(b)
os.rename(a,b)
with open('src1', 'wb') as fout:
fout.write(os.urandom(350000000))
with open('src2', 'wb') as fout:
fout.write(os.urandom(350000000))
with open('dest1', 'wb') as fout:
fout.write(os.urandom(350000000))
with open('dest2', 'wb') as fout:
fout.write(os.urandom(350000000))
print('shutil.move(): %.3f' %timeit.timeit('shutil.move(os.path.join("c:\python","src1"),os.path.join("c:\python","dest1"))','import shutil,os.path', number = 1))
print('os.rename(): %.3f' %timeit.timeit('myMove("src2","dest2")','from __main__ import myMove', number = 1))
prints: 印刷品:
shutil.move(): 0.81
shutil.move():0.81
os.rename(): 0.052
os.rename():0.052
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.