在Python3.X中删除多个同名子目录

2024-06-01 00:10:18 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我正在用python做一些实验,并有一些jupyter笔记本用于评估。我用不同的参数多次运行每个实验,因此我的文件夹结构如下所示:

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

当我归档实验时,我想去掉.ipynb\u 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)

基本上,我创建一个与所需foldername匹配的正则表达式,遍历所有子文件夹,将路径存储在dir中,然后再次循环以删除所有.ipynb\u checkpoints文件夹。 剧本写得很好。但是,我对代码不满意,尤其是两个for循环。你知道吗

因为我还在学习如何编程,我现在问自己是否有一个更为python的方法来做到这一点。任何关于如何使代码更快(尽管脚本目前只需不到一秒钟)、pythonic或look cleaner的评论都是值得赞赏的。谢谢你的帮助!你知道吗


Tags: runfromimportre文件夹foroswalk
1条回答
网友
1楼 · 发布于 2024-06-01 00:10:18
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')]

相关问题 更多 >