2011-11-23 12 views
10

znaleźć Mam strukturę dir tak:funkcja Pythona, który podobny do bash polecenia

[[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 

Chciałbym napisać skrypt Pythona, aby zmienić wszystkie * a.png do 01.png, * b. png do 02.png i tak dalej. Frist Myślę, że muszę użyć czegoś podobnego do find . -name '*.png', a najbardziej podobną rzeczą jaką znalazłem w pythonie była os.walk. Jednak w os.walk muszę sprawdzić każdy plik, jeśli jest to png, to połączę go z jego korzeniem, jakoś nie tak elegancko. Zastanawiałem się, czy istnieje lepszy sposób na zrobienie tego? Z góry dziękuję.

Odpowiedz

8

Dla takiego wzoru wyszukiwania prawdopodobnie można uciec z glob.

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

Możesz użyć os.walk, aby przejść przez drzewo katalogów. Może to działa?

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

Chciałbym rozważyć użycie 'if file.endswith (". Png "):' zamiast tego 'rsplit()' (które wykona więcej pracy niż jest to naprawdę konieczne). –

0

W dzisiejszych czasach pathlib jest wygodną opcją.

Powiązane problemy