Python函数类似于bash find命令

时间:2011-11-23 18:17:58

标签: python

我有如下的目录结构:

[me@mypc]$ tree .
.
├── set01
│   ├── 01
│   │   ├── p1-001a.png
│   │   ├── p1-001b.png
│   │   ├── p1-001c.png
│   │   ├── p1-001d.png
│   │   └── p1-001e.png
│   ├── 02
│   │   ├── p2-001a.png
│   │   ├── p2-001b.png
│   │   ├── p2-001c.png
│   │   ├── p2-001d.png
│   │   └── p2-001e.png

我想写一个python脚本将所有* a.png重命名为01.png,* b.png重命名为02.png,依此类推。 Frist我想我必须使用与find . -name '*.png'类似的东西,而我在python中发现的最相似的东西是os.walk。但是,在os.walk我必须检查每个文件,如果它是png,那么我将它与它的根连接,不知何故不那么优雅。我想知道是否有更好的方法来做到这一点?提前谢谢。

4 个答案:

答案 0 :(得分:9)

对于类似的搜索模式,您可能会使用glob

from glob import glob
paths = glob('set01/*/*.png')

答案 1 :(得分:7)

您可以使用os.walk遍历目录树。 也许这有用吗?

import os

for dpath, dnames, fnames in os.walk("."):
  for i, fname in enumerate([os.path.join(dpath, fname) for fname in fnames]):
    if fname.endswith(".png"):
      #os.rename(fname, os.path.join(dpath, "%04d.png" % i))
      print "mv %s %s" % (fname, os.path.join(dpath, "%04d.png" % i))

答案 2 :(得分:0)

查看Beazley先生的gen_find

答案 3 :(得分:0)

目前,pathlib是一个方便的选择。