在Python中搜索带扩展名和复制到目录的文件?

时间:2011-10-29 01:36:41

标签: python io directory copy backup

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

感谢您的时间,
小连

1 个答案:

答案 0 :(得分:2)

要探索文件系统,您可以尝试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