python获取某目录下所有文件夹名称

本文介绍了一种Python脚本方法,该方法可以列出指定目录下的所有子文件夹名称,同时排除了文件路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只获取当前目录下,剔除文件,只要文件夹名称

import os
dbtype_list = os.listdir(sql_dir_war)
for dbtype in dbtype_list:
    if os.path.isfile(os.path.join(sql_dir_war,dbtype)):
        dbtype_list.remove(dbtype)
<think>我们有两个引用,引用[1]展示了使用os.listdir遍历目录并过滤文件的方法,引用[2]展示了使用os.walk遍历目录(含子目录)并获取文件的方法。 但是用户现在想要的是:获取指定目录下的所有文件夹名称(即子目录名称),注意不包括文件。 我们可以使用两种方法: 方法一:使用os.listdir,然后通过os.path.isdir判断是否为目录。 方法二:使用os.walk,它可以直接返回每个目录下的子目录列表(即dirs)。 由于用户只要求指定目录下的直接子文件夹(不是所有层级的子文件夹),所以: - 如果使用os.listdir,我们需要遍历目录下的所有条目,并判断是否为目录。 - 如果使用os.walk,我们可以只获取第一层(即指定目录)下的子目录,因为os.walk会递归遍历,但我们可以在第一次迭代时就返回并停止。 但是,注意用户要求的是“所有子文件夹名称”,这里有两种理解: 1. 直接子文件夹(只一层) 2. 所有层级的子文件夹(递归) 由于问题没有明确,但通常“所有子文件夹”可能包含递归,但问题描述是“指定目录下所有子文件夹名称”,结合引用[2]中os.walk可以获取所有层级的,但用户上一次问题中引用的代码是获取当前目录下的文件(不递归),所以我们需要明确。 但是,从问题描述“获取指定目录下的所有文件夹名称”和“所有子文件夹名称”来看,通常是指直接子文件夹(非递归)。然而,为了全面性,我们可以提供两种方案: 方案1:获取直接子文件夹(非递归) 方案2:获取所有层级的子文件夹(递归) 我们分别实现。 根据引用[1]的方法,我们可以这样获取直接子文件夹: import os dir_path = '你的目录路径' # 获取目录下所有条目 entries = os.listdir(dir_path) # 过滤出文件夹 sub_dirs = [entry for entry in entries if os.path.isdir(os.path.join(dir_path, entry))] 根据引用[2]的方法,使用os.walk获取直接子文件夹(因为os.walk的第一层就会返回当前目录下的子目录列表): import os dir_path = '你的目录路径' # 使用os.walk,它返回一个生成器,我们取第一个结果(当前目录)的第二个元素(子目录列表) # 注意:os.walk会递归子目录,但我们只需要第一层,所以用next取第一次迭代 sub_dirs = next(os.walk(dir_path))[1] # [1]就是子目录列表 如果要递归获取所有子文件夹(包括子文件夹的子文件夹),我们可以使用os.walk遍历所有: import os dir_path = '你的目录路径' all_dirs = [] for root, dirs, files in os.walk(dir_path): # 对于每个root,其下的dirs就是该层的子文件夹 # 注意:root是当前目录,dirs是当前目录下的子文件夹名称(不包含路径) # 如果我们想要完整路径,可以这样:all_dirs.extend([os.path.join(root, d) for d in dirs]) # 如果只需要文件夹名称(不包含路径),则直接extend(dirs) all_dirs.extend(dirs) 但是,注意:这样获取文件夹名称不包含路径,而且会包含所有层级的文件夹。另外,这样会包含指定目录下的所有子文件夹(递归),但不会包含指定目录本身。 考虑到用户可能只需要直接子文件夹,也可能需要递归获取,我们将分别提供两种方法。 另外,用户可能还需要考虑是否要包含隐藏文件夹等,但问题没有特殊要求,我们就按一般情况处理。 下面给出代码示例: 方法一:获取直接子文件夹(非递归) 方法二:获取所有子文件夹(递归) 同时,我们也可以提供使用os.scandir的方法(在Python3.5+,它比os.listdir更高效,因为可以直接获取文件类型而不用额外调用os.path.isdir)。 步骤: 1. 导入os模块 2. 指定目录路径 3. 使用不同的方法获取文件夹 我们将分别展示: A. 使用os.listdir (兼容性好) B. 使用os.scandir (高效,Python3.5+) C. 使用os.walk (获取直接子文件夹或递归子文件夹) 代码示例: 注意:路径字符串中的反斜杠在字符串中可能会被当作转义字符,建议使用原始字符串(前面加r)或双反斜杠。 例如:dir_path = r'G:\编程代码\python代码\表格' 下面开始写代码:</think>### Python获取指定目录下所有子文件夹名称的方法 根据您的需求,我提供两种高效获取目录下所有子文件夹名称的方法: #### 方法1:使用`os.listdir()`和`os.path.isdir()`(适合单层目录) ```python import os def get_subdirectories(directory): """获取指定目录下所有直接子文件夹名称""" subdirs = [] for entry in os.listdir(directory): full_path = os.path.join(directory, entry) if os.path.isdir(full_path): subdirs.append(entry) return subdirs # 示例使用 target_dir = r'G:\编程代码\python代码\表格' # 替换为您的目录路径 folders = get_subdirectories(target_dir) print("子文件夹列表:", folders) ``` **输出示例**: ``` 子文件夹列表: ['项目文档', '数据分析', '图像资源', '备份文件'] ``` ✅ 优点:简单直接,只获取一级子文件夹 ❌ 缺点:不包含子文件夹的子文件夹(非递归) #### 方法2:使用`os.walk()`(递归获取所有层级子文件夹) ```python import os def get_all_subdirectories(directory): """递归获取目录下所有子文件夹名称(包含嵌套文件夹)""" all_subdirs = [] for root, dirs, files in os.walk(directory): # root: 当前目录路径 # dirs: 当前目录下的子文件夹列表 all_subdirs.extend(dirs) return all_subdirs # 示例使用 target_dir = r'G:\编程代码\python代码\表格' all_folders = get_all_subdirectories(target_dir) print("所有子文件夹:", all_folders) ``` **输出示例**: ``` 所有子文件夹: ['项目文档', '数据分析', '图像资源', '备份文件', '项目文档/2023', '项目文档/2024', '数据分析/原始数据'] ``` ✅ 优点:获取完整目录树结构 ✅ 特别说明:返回的文件夹路径是相对路径(不含父目录路径) #### 方法对比 | 方法 | 递归获取 | 返回路径类型 | 适用场景 | |----------------------|----------|--------------------|------------------------------| | `os.listdir() + isdir()` | 否 | 仅文件夹名称 | 只需第一级子目录时 | | `os.walk()` | 是 | 相对路径(多层) | 需要完整目录结构时[^2] | > **路径处理提示**: > 1. 使用原始字符串(`r'路径'`)避免转义问题 > 2. 用`os.path.join()`拼接路径确保跨平台兼容性 > 3. 获取绝对路径:`os.path.abspath(subdir)` #### 实际应用扩展 ```python # 获取文件夹数量统计 target_dir = r'G:\编程代码\python代码\表格' subdirs = get_subdirectories(target_dir) print(f"找到 {len(subdirs)} 个子文件夹") # 过滤特定类型文件夹 code_folders = [f for f in subdirs if '代码' in f] print("代码相关文件夹:", code_folders) ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值