【问题标题】:How do you move tree with ignore patterns in python你如何在python中移动带有忽略模式的树
【发布时间】:2012-03-31 11:39:03
【问题描述】:

使用 shutil.copytree 我可以将包含文件和文件夹的整个目录复制到其自身的文件夹中,同时忽略某些文件夹及其内容。

source = htpc.root
destination = os.path.join(htpc.root, "old")

shutil.copytree(source, destination, ignore=shutil.ignore_patterns('userdata', 'old'))

除了移动而不是复制之外,有没有办法做同样的事情,所以我只会将用户数据和旧文件留在根目录中,所有旧文件和文件夹都在旧文件中。任何帮助都会很棒。谢谢

【问题讨论】:

  • 我不知道有任何现有的方法可以做到这一点,但一个骇人听闻的解决方案可能是将您的 shutil.ignore_patters() 包装在记录移动文件的东西中(通过获取输入和输出之间的差异对于函数),然后删除这些文件 - 到那时,可能值得实现您自己的 movetree

标签: python


【解决方案1】:

shutil 模块不提供该功能。

您可以在文件中看到copytree() 函数和其他函数:shutil.py

可能位于:/usr/local/python2.6/shutil.py

有9个函数,shutil pydoc

因为 copytree 已经非常接近您所需要的,我会通过将 copytree() 克隆到一个新函数然后调整它以移动而不是复制来解决这个问题。

为此:

在您的系统上找到 shutil.py 并在文本编辑器/IDE 中打开。

找到下面的行:

def copytree(src, dst, symlinks=False, ignore=None):

将此处的所有内容复制到 copytree 函数的末尾。

然后将其粘贴到您的代码中并重命名为 def moveWithIgnore(src, ...move2(..)

原始 copytree() 函数顶部的 cmets 说 copy2() 完成了“工作”。在shutils.py 中,您可以看到它以(src, dst) 作为参数。

shutils 中还有move() 函数,它也接受(src, dst)。在新的moveWithIgnore 函数中将copy2 替换为move 看起来是安全的。

原来的copytree() 函数使用递归(它调用自己)。确保更新新函数中的代码行,使其调用自身而不是 copytree。

我相信你可以从这里拿走它:-)

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多