shutil.move()比os.remove()+ os.rename()慢

时间:2014-04-23 00:09:22

标签: python python-3.x

所以,我注意到当我想移动文件'a'并覆盖目标'b'os.remove('b')然后os.rename('a','b')很多比shutil.move('a','b')更快。

我看过that

  

如果目标位于当前文件系统上,则使用os.rename()。否则,将src复制(使用shutil.copy2())到dst然后删除。在符号链接的情况下,将在dst中创建指向src目标的新符号链接,并且将删除src。

但为什么不使用os.remove()?

示例(第一次使用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))

打印:

  

shutil.move():0.81

     

os.rename():0.052

1 个答案:

答案 0 :(得分:4)

如果os.rename(src, dst)src位于不同的文件系统上,则无法保证dst有效。如果dst存在,它在Windows上不起作用。

正如the docs所说