Функция Python, аналогичная команде bash find

У меня есть структура dir, как показано ниже:

[[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 script, чтобы переименовать все * a.png на 01.png, * b.png на 02.png и т.д. Фрист, я думаю, мне нужно использовать что-то похожее на find . -name '*.png', а наиболее похожее на python - os.walk. Тем не менее, в os.walk мне нужно проверить каждый файл, если он png, тогда я свяжу его с ним root, как-то не так элегантно. Мне было интересно, есть ли лучший способ сделать это? Спасибо заранее.

Ответ 1

Для такого шаблона поиска вы, возможно, сойдете с glob.

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

Ответ 2

Вы можете использовать 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))

Ответ 3

Откажитесь от gen_find от мистера Бизли.

Ответ 4

В наши дни pathlib является удобным вариантом.