【发布时间】:2011-12-17 16:43:31
【问题描述】:
我对 Python 还是很陌生,我正在尝试创建一个基本的备份程序,这将允许我在整个主驱动器中搜索具有特定扩展名(在本例中为 .doc)的文件计算机,然后复制到预定目录(因为程序将从 USB 运行)。我已经掌握了一些基本的 I/O 命令,但是在这方面遇到了一些困难。
有时间的人能帮我解决这个问题吗?
感谢您的宝贵时间,
利亚姆。
【问题讨论】:
标签: python io directory copy backup
我对 Python 还是很陌生,我正在尝试创建一个基本的备份程序,这将允许我在整个主驱动器中搜索具有特定扩展名(在本例中为 .doc)的文件计算机,然后复制到预定目录(因为程序将从 USB 运行)。我已经掌握了一些基本的 I/O 命令,但是在这方面遇到了一些困难。
有时间的人能帮我解决这个问题吗?
感谢您的宝贵时间,
利亚姆。
【问题讨论】:
标签: python io directory copy backup
要探索文件系统,您可以尝试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
【讨论】: