Удалите несколько подкаталогов с одним и тем же именем в Python 3.X - PullRequest
0 голосов
/ 08 октября 2018

В настоящее время я провожу некоторые эксперименты на python и у меня есть несколько ноутбуков Jupyter для оценки.Я запускаю каждый эксперимент несколько раз и с разными параметрами, поэтому структура папок выглядит примерно так:

root
  |-- .ipynb_checkpoints
  |-- idea 1
  |      |-- .ipynb_checkpoints
  |      |-- run 1
  |      |      |-- .ipynb_checkpoints
  |      |      |-- results & evaluation
  |      |-- run 2
  |      |      |-- .ipynb_checkpoints
  |      |      ...
  |      ...
  |-- idea 2
  |      |-- .ipynb_checkpoints
  |      ...
  ...

Когда я архивирую эксперименты, я хочу избавиться от .ipynb_checkpoints папки, так как они больше не нужны, на мой взгляд.Для этого я написал быстрый и грязный маленький скрипт.

import re
from os import walk
from shutil import rmtree

r = re.compile('(^.*\.ipynb_checkpoints$)')
dirs = []

for dirpath, _, _ in os.walk('.', topdown=True):
    if r.match(dirpath):
        dirs.append(dirpath)

for d in dirs:
    shutil.rmtree(d)

По сути, я создаю регулярное выражение, соответствующее желаемому имени папки, просматриваю все подпапки, сохраняю путь в dir , а затемвторой цикл, чтобы удалить все папки .ipynb_checkpoints .Скрипт работает отлично.Однако я не удовлетворен кодом, особенно двумя for-loop .

Поскольку я все еще учусь программировать, я спрашиваю себя, есть ли более питоническийспособ сделать это.Любой комментарий о том, как сделать код быстрее (хотя сценарий в настоящее время занимает меньше секунды), питонский или выглядит чище, приветствуется.Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 09 октября 2018
In[2]: from glob import glob
In[3]: list(glob('**/.ipynb_checkpoints', recursive=True))
Out[3]: 
['root_dir/.ipynb_checkpoints',
 'root_dir/idea_2/.ipynb_checkpoints',
 'root_dir/idea_1/.ipynb_checkpoints',
 'root_dir/idea_1/run_1/.ipynb_checkpoints',
 'root_dir/idea_1/run_2/.ipynb_checkpoints']

In[4]: from pathlib import Path
In[5]: list(Path().rglob('**/.ipynb_checkpoints'))
Out[5]: 
[PosixPath('root_dir/.ipynb_checkpoints'),
 PosixPath('root_dir/idea_2/.ipynb_checkpoints'),
 PosixPath('root_dir/idea_1/.ipynb_checkpoints'),
 PosixPath('root_dir/idea_1/run_1/.ipynb_checkpoints'),
 PosixPath('root_dir/idea_1/run_2/.ipynb_checkpoints')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...