2011-11-23 17 views
10

tengo una estructura de directorio como el siguiente:función de Python que similar a golpear a encontrar comandos

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

me gustaría escribir un script Python para cambiar el nombre de todos * a.png a 01.png, * b. png a 02.png, y así sucesivamente. Frist supongo que tengo que usar algo similar a find . -name '*.png', y lo más parecido que encontré en python fue os.walk. Sin embargo, en os.walk tengo que verificar cada archivo, si es png, entonces lo concatenaré con su raíz, de alguna manera no tan elegante. Me preguntaba si hay una mejor manera de hacer esto. Gracias por adelantado.

Respuesta

8

Para un patrón de búsqueda como ese, probablemente pueda salirse con glob.

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

Echa un vistazo gen_find de Mr. Beazley.

6

Puede usar os.walk para recorrer el árbol de directorios. Quizás esto funcione?

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

Consideraría usar 'if file.endswith (". Png "):' en lugar de 'rsplit()' (que hará más trabajo de lo que realmente es necesario). –

0

En estos días, pathlib es una opción conveniente.

Cuestiones relacionadas