【问题标题】:Search for Files with Extension and Copy to Directory in Python?在 Python 中搜索带有扩展名的文件并复制到目录?
【发布时间】:2011-12-17 16:43:31
【问题描述】:

我对 Python 还是很陌生,我正在尝试创建一个基本的备份程序,这将允许我在整个主驱动器中搜索具有特定扩展名(在本例中为 .doc)的文件计算机,然后复制到预定目录(因为程序将从 USB 运行)。我已经掌握了一些基本的 I/O 命令,但是在这方面遇到了一些困难。
有时间的人能帮我解决这个问题吗?

感谢您的宝贵时间,
利亚姆。

【问题讨论】:

    标签: python io directory copy backup


    【解决方案1】:

    要探索文件系统,您可以尝试os.walk。它将递归地跟随一个目录,在每个目录中产生一个文件和目录列表。

    例如,给定这样的目录结构:

    .
    ├── baz
    │   └── bif
    │       ├── bang
    │       └── file1.doc
    └── foo
        ├── bar
        │   └── file3.doc
        └── file2.doc
    

    这段代码:

    import os
    
    print list(os.walk('.'))  # walk current (.) directory
    

    会产生这样的东西:

    [('.', ['baz', 'foo'], []),
     ('./baz', ['bif'], []),
     ('./baz/bif', ['bang'], ['file1.doc']),
     ('./baz/bif/bang', [], []),
     ('./foo', ['bar'], ['file2.doc']),
     ('./foo/bar', [], ['file3.doc'])]
    

    然后您可以遍历结果并编译要复制的文件列表。

    对于复制文件,shutil 包有 copy,它只接受 src/dest 文件路径。有关更多信息,请参阅文档:http://docs.python.org/library/shutil.html

    编辑

    更多有用的文件搜索包括:

    • glob 包:顾名思义,glob 样式文件匹配(*.txt、. 等)。我不相信这支持递归搜索。在这个例子中,如果我做glob('foo/*.doc'),我会得到['foo/file2.doc']的结果。
    • fnmatch 包中的 fnmatch 可以对字符串进行 glob 样式模式匹配。示例 fnmatch('foo.txt', '*.txt') 将返回 True

    【讨论】:

    • 感谢您的反馈。我想到的可能是使用您上面描述的 os.walk 方法创建要复制的文件列表,然后使用 shutil.copyfile 复制所述列表中的所有文件。但这引发了两个问题——1)这让我很头疼 2)它似乎不是最优雅的解决方案;如果我更努力地思考,可能有一种更简单的方法来处理这个问题。再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2010-09-22
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多