python - shutil.copy2(s,d) 和shutil.move(s,d) 的区别

标签 python copy timestamp move shutil

我已经阅读了为 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

我无法弄清楚为什么会这样......

最佳答案

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

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

关于python - shutil.copy2(s,d) 和shutil.move(s,d) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6955504/

相关文章:

python - 如何调试我使用 ctypes 从 Python 调用的 Visual Studio 中的 DLL?

java - Java中如何复制原始类型内存?

android - 如何将一个 arrayList 复制到另一个而不先引用?

javascript - 将字段内容复制到其下方所有动态生成的类型字段

mysql - 如何仅获取过去 30 天内特定时段的数据

过去的 PHP unix 时间戳

python - 深度复制后时间戳的 ruamel.yaml 格式似乎已损坏

python - 遍历字典并更改值

python - 为什么对全局变量的错误分配会提早引发异常?

python - 子类化方法显示虚拟环境中站点包中的错误