2011-11-23 90 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是一個方便的選項。