【实验常用】Python在指定路径下批量创建及删除文件夹

前言

  博主在做深度学习时,尤其是计算机视觉方向,为了保存网络训练/测试过程中的一些输出结果,需要批量创建和删除一些文件夹,因此撰写了该博文。

一、在指定路径下创建1个文件夹

  如果你只是想在某个指定路径下创建一个指定名称的文件夹,那么直接复制下述代码,并将下述代码中的路径及文件夹名称修改为你自己的信息即可。

import os

# 前者为路径,后者为待创建的文件夹名称
dir = os.path.join(r'D:\yandandan2021\code','epoch1') 

# 判断上述路径中是否已经存在目标文件夹
isExists = os.path.exists(dir) 

# 如果不存在则创建,否则不做任何操作
if not isExists: 
    os.mkdir(dir)

  上述代码的具体效果可参考下图:

  在这里插入图片描述

二、在指定路径下创建N个文件夹

  当然,既然都打算用Python来自动创建文件夹,肯定是要创建不止一个文件夹。其实,批量创建N个文件夹和创建一个文件夹的道理是一样的,只需要加一个循环,并在创建文件夹时为每个文件夹名称加上一个序号信息即可。具体代码如下:

import os

def create_dirs():
    for i in range(1,6): # 这里需要注意,i取不到6,因为range()是前闭后开的,即i的取值范围为1-5。
        
        dir = os.path
<think>我们根据用户需求,需要实现两个层级的文件夹创建: 第一级:根据Excel中的一列(例如'name')创建文件夹 第二级:在每个第一级文件夹下,再创建多个子文件夹(子文件夹的名称可能来自另一个列表或Excel的另一列) 我们可以分两步: 1. 读取Excel,获取第一级文件夹名称列表。 2. 对于每个第一级文件夹创建文件夹,然后在该文件夹创建多个子文件夹(假设子文件夹名称列表已知,或者从另一个Excel读取)。 但是用户没有具体说明子文件夹的名称来源。我们假设用户会提供子文件夹名称列表,或者从同一个Excel的另一列获取。 下面我们设计两种方案: 方案一:子文件夹名称是固定的列表(比如:['doc', 'img', 'data']) 方案二:子文件夹名称也是从Excel的某一列动态获取(可能是同一文件的不同列,或是另一个文件) 由于用户需求不明确,我们提供两种情况的代码示例。 首先,我们导入必要的库:pandas和os。 注意:如果用户没有提供子文件夹名称的具体来源,我们可以先按固定列表的方式实现,然后说明如何扩展为从另一列读取。 步骤: 1. 读取Excel文件,获取第一级文件夹名称(假设列名为'name')。 2. 定义子文件夹名称列表(可以是固定列表,也可以是从Excel另一列读取的列表)。 3. 遍历第一级文件夹名称,对于每个名称: a. 创建第一级文件夹的完整路径。 b. 在该路径下,遍历子文件夹名称列表,创建文件夹。 为了灵活性,我们可以让用户自定义子文件夹名称的来源方式。 下面我们分别给出两个示例代码。 示例一:子文件夹名称是固定列表 假设我们要在每个第一级文件夹创建三个子文件夹:'doc', 'img', 'data' 示例二:子文件夹名称是从Excel的另一列(比如'subfolder')读取,注意这一列可能包含多个子文件夹名称(每个单元格可能是一个名称,一行对应一个一级文件夹,该一级文件夹下可能有多个子文件夹,每个子文件夹名称在同一个单元格用逗号分隔?或者每个一级文件夹对应多个子文件夹名称分布在多行?)这里情况比较复杂。 我们假设第二种情况:Excel中有一列是主文件夹名称('name'),另一列是子文件夹名称('subfolders'),并且每个单元格存储的是用逗号分隔的多个子文件夹名称(例如:'doc,img,data')。这样,每个一级文件夹对应的子文件夹名称在一个字符串中,我们用逗号分割得到列表。 如果用户的数据结构不同,可能需要调整。 下面分别写两个示例代码。 示例一:固定子文件夹列表 ```python import pandas as pd import os # 设置路径 excel_path = 'E:\\name\\name.xls' # Excel文件路径 base_dir = 'E:\\name' # 一级文件夹的根目录 # 固定子文件夹名称列表 subfolders = ['doc', 'img', 'data'] # 读取Excel data = pd.read_excel(excel_path) # 遍历每个一级文件夹名称 for folder_name in data['name']: # 创建一级文件夹路径 main_folder = os.path.join(base_dir, folder_name) # 创建一级文件夹(如果不存在) os.makedirs(main_folder, exist_ok=True) print(f"创建文件夹: {main_folder}") # 在一级文件夹创建文件夹 for sub in subfolders: sub_path = os.path.join(main_folder, sub) os.makedirs(sub_path, exist_ok=True) print(f" 在{main_folder}下创建文件夹: {sub_path}") ``` 示例二:从Excel的另一列读取子文件夹名称(该列是用逗号分隔的字符串) ```python import pandas as pd import os excel_path = 'E:\\name\\name.xls' base_dir = 'E:\\name' # 读取Excel,假设有'name'列和'subfolders'列 data = pd.read_excel(excel_path) # 遍历每一行 for index, row in data.iterrows(): main_folder_name = row['name'] # 获取子文件夹名称字符串,并分割成列表 subfolders_str = row['subfolders'] # 如果该单元格为空,我们可以跳过或者设置一个默认值 if pd.isna(subfolders_str): subfolders_list = [] # 或者设置一个默认列表,如['default'] else: subfolders_list = subfolders_str.split(',') # 用逗号分割 # 创建文件夹 main_folder_path = os.path.join(base_dir, main_folder_name) os.makedirs(main_folder_path, exist_ok=True) print(f"创建文件夹: {main_folder_path}") # 创建文件夹 for sub in subfolders_list: # 去除子文件夹名称可能存在的空格 sub = sub.strip() if sub: # 非空字符串 sub_path = os.path.join(main_folder_path, sub) os.makedirs(sub_path, exist_ok=True) print(f" 在{main_folder_path}下创建文件夹: {sub_path}") ``` 注意:第二种方法需要Excel中有'subfolders'列,并且每个单元格存储的是用逗号分隔的字符串。 如果用户的数据结构不同,比如子文件夹名称在另一个Excel文件中,或者每个一级文件夹对应的子文件夹名称有多行(即另一个表,通过一级文件夹名称关联),那么就需要使用合并表格的方法。这里不展开,因为用户需求不明确。 最后,我们提醒用户,可以根据实际需求调整代码,比如修改列名、路径等。 另外,代码中使用了`exist_ok=True`,这样如果文件夹已经存在,不会报错。 请用户根据实际情况选择并调整代码。</think>以下是如何使用Python批量创建两级文件夹结构的完整解决方案: ### 解决方案 #### 1. 准备数据 创建Excel文件`names.xlsx`,包含两列数据: - `parent_folder`:一级文件夹名称 - `sub_folders`:二级子文件夹名称(用逗号分隔多个名称) 示例数据: | parent_folder | sub_folders | |---------------|--------------------| | 项目A | 文档,图片,数据 | | 项目B | 报告,源码,测试用例 | #### 2. Python实现代码 ```python import pandas as pd import os # 配置路径 EXCEL_PATH = 'names.xlsx' # Excel文件路径 BASE_DIR = 'D:/Projects' # 基础目录(按需修改) # 读取Excel数据 df = pd.read_excel(EXCEL_PATH) # 创建文件夹结构 for _, row in df.iterrows(): # 创建一级文件夹 parent_path = os.path.join(BASE_DIR, row['parent_folder']) os.makedirs(parent_path, exist_ok=True) print(f"创建文件夹: {parent_path}") # 创建二级子文件夹 sub_folders = [f.strip() for f in str(row['sub_folders']).split(',')] for folder in sub_folders: if folder: # 确保非空名称 sub_path = os.path.join(parent_path, folder) os.makedirs(sub_path, exist_ok=True) print(f" └─ 创建文件夹: {sub_path}") print("所有文件夹创建完成!") ``` #### 3. 关键功能说明 1. **数据读取**: - 使用`pandas`读取Excel文件 - `exist_ok=True`参数确保已存在文件夹时不报错 2. **路径处理**: - `os.path.join()`自动处理操作系统路径差异 - 字符串分割处理逗号分隔的子文件夹名称 3. **错误处理**: - 自动跳过空文件夹名称 - 兼容不同操作系统路径格式 #### 4. 执行结果示例 ``` 创建文件夹: D:/Projects/项目A └─ 创建文件夹: D:/Projects/项目A/文档 └─ 创建文件夹: D:/Projects/项目A/图片 └─ 创建文件夹: D:/Projects/项目A/数据 创建文件夹: D:/Projects/项目B └─ 创建文件夹: D:/Projects/项目B/报告 └─ 创建文件夹: D:/Projects/项目B/源码 └─ 创建文件夹: D:/Projects/项目B/测试用例 所有文件夹创建完成! ``` ### 自定义选项 1. **修改基础路径**:调整`BASE_DIR`变量 2. **变更列名**:根据实际Excel列名修改`row['parent_folder']`和`row['sub_folders']` 3. **添加更多层级**:在循环内嵌套额外创建逻辑 4. **处理特殊字符**:添加`replace()`处理非法字符(如`/`) > 提示:使用前请安装依赖库: > `pip install pandas openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信小海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值