2011-11-23 24 views
10

我有一个目录结构如下所示:Python函数类似来砸find命令

[[email protected]]$ 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等等。首先,我猜我必须使用类似于find . -name '*.png'的东西,而我在Python中找到的最类似的东西是os.walk。然而,在os.walk我必须检查每个文件,如果它是PNG,那么我将它连接到它的根,不知何故不那么优雅。我想知道是否有更好的方法来做到这一点?提前致谢。

回答

8

对于这样的搜索模式,您可能会与glob脱身。

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

您可以使用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)) 
+1

我会考虑使用'if file.endswith(“。png”):'而不是那个'rsplit()'(它会做比实际需要更多的工作)。 –

0

这几天,pathlib是一个方便的选项。