shutil.copy2(s,d)和shutil.move(s,d)之间的区别

时间:2011-08-05 11:26:20

标签: python copy timestamp move shutil

我已阅读为shutil.move和copy2提供的文档。从我的理解移动只调用copy2函数,然后调用remove函数,而copy2调用copy然后copystat。这一切都有道理,除非我使用它们,我发现一个有趣的警告(我认为) 如果我在文件上使用移动功能,则文件上的所有时间戳保持不变,包括创建日期。如果我只是在文件上调用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 个答案:

答案 0 :(得分:4)

根据我对shutil文档的理解,shutil.copystat()不保留创建日期,它只保留上次访问时间和上次修改日期。

此外,shutil.move()仅在源和目标位于不同文件系统时使用shutil.copy2()后跟shutil.copystat(),否则它将使用os.rename()函数,该函数只是移动文件到新位置而不创建新文件,并保留所有文件属性,包括创建日期。这就是为什么你注意到不同的行为。