至少在Windows上,shutil.move包含到另一个驱动器的只读文件的文件夹将失败。它失败是因为move是用copy后跟rmtree实现的。最后,是rmtree试图删除不可写的文件。
目前,我通过首先为所有(嵌套的)文件设置stat.S_IWUSER来解决这个问题,但现在我仍然应该在之后还原原始的stat

def make_tree_writable(source_dir):
    for root, dirs, files in os.walk(source_dir):
        for name in files:
            make_writable(path.join(root, name))

def make_writable(path_):
    os.chmod(path_, stat.S_IWUSR)

def movetree_workaround(source_dir, target_dir):
    make_tree_writable(source_dir)
    shutil.move(source_dir, target_dir)

所以我想:这是路吗?在制作过程中是否有一个shutil2我可以使用?我能帮上什么忙吗?

最佳答案

您可以在两个步骤中完成:首先,使用shutil.copytree()以适当的权限复制完整的目录和文件结构。然后,您可以更改源的权限以确保您有权删除内容,并使用shutil.rmtree()删除旧源。

关于python - 如何使用跨驱动器的只读文件`shutil.move`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40969465/

10-12 18:29