shutil.copy2(s,d)和shutil.move(s,d)的区别
我看过shutil.move和copy2的文档。根据我的理解,move其实就是先调用copy2函数,然后再调用remove函数,而copy2则是先调用copy,再调用copystat。这些我都能理解,但在实际使用中,我发现了一个有趣的情况(我觉得是这样)。
当我对一个文件使用move函数时,文件的所有时间戳,包括创建日期,都会保持不变。但是如果我直接使用copy2函数,创建日期就会变成当前的时间。既然move是用copy2来实现的,为什么创建日期没有被改变呢?还是说文档把这个问题简化了?我希望我有的一个脚本在使用copy2时也能复制原始的创建时间戳。我才刚学了几天Python,所以我想知道为什么这两个函数调用之间的创建时间戳会不同。我现在用的是Windows 7 64位,不知道这是否有影响。谢谢大家的帮助。
例子:
import os
import shutil
src = os.path.join(os.getcwd(), "copyme.txt")
src2 = os.path.join(os.getcwd(), "moveme.txt")
dst = os.path.join(os.getcwd(), "New Folder")
shutil.copy2(src, dst) #creation date changed
shutil.move(src2, dst) #creation date remains the same as original
我搞不明白为什么会这样……
1 个回答
5
根据我对shutil
文档的理解,shutil.copystat()
这个函数不会保留文件的创建日期,它只会保留最后访问时间和最后修改日期。
另外,shutil.move()
这个函数在源文件和目标文件在不同的文件系统时,会先用shutil.copy2()
复制文件,然后再用shutil.copystat()
来复制文件的状态。如果源文件和目标文件在同一个文件系统,它就会直接用os.rename()
这个函数来移动文件,这样做不会创建新文件,并且会保留所有的文件属性,包括创建日期。这就是你看到的不同表现的原因。