Python 获取文件夹路径名称、路径下所有子目录名称,以及所有非目录子文件名称

在Python中要获取文件的名称等都是用到os模块,

利用os.walk()函数去遍历路径,

输出你在遍历的文件夹当前目录

输出你在遍历的文件夹当前目录下所有文件夹名称

输出你在遍历的文件夹当前目录下所有非文件夹的名称

这里用到了for 循环,可以深度遍历路径下的文件夹信息,以及文件夹下的文件夹等深度信息。

import os


def file_name(file_path):

    for root, dirs, files in os.walk(file_path):
    
        print(root) 

        print(dirs) 

        print(files)  


file_name('E:\Download\EC Download')

file_path:就是你想要的path(路径)

os.walk(path):就是在path路径下去遍历文件夹,就像是a = [b,c,d[]],walk获取到是就是b,c,d的名称

root:就是获取当前目录路径,就是a

dirs:就是获取当前路径下所有子目录,就是d

files: 就是获取当前路径下所有非目录子文件,就是b,c


------------------------------------ 显示效果-------------------------------------


[
  "E:\\Download\\EC Download",
  [
    "2018超强干货礼包"
  ],
  [
    "sitemap.html",
    "网盘链接-20190122.xlsx",
    "职业发展.pptx"
  ],
  "E:\\Download\\EC Download\\2018超强干货礼包",
  [
    "1.开放性问题.pdf",
    "2.真题整理.pdf"
  ],
  [],
]
<think>我们参考了引用的内容,但用户明确需求是:获取指定路径下所有文件和子文件夹的名字根据引用[1][2]可知,os.walk可以遍历目录,返回三元组(root,dirs,files)用户要求获取所有文件和子文件夹的名字(注意:不包括路径,只包括名字)我们可以通过循环os.walk的结果,分别收集每个root下的所有子文件夹(dirs)和文件(files)但是注意,引用[3]提到topdown参数,不过这里我们不涉及隐藏文件的问题(用户没有要求),如果用户需要排除隐藏文件,可以自行在遍历时过滤(但问题没提就不做)不过注意,os.walk返回的dirs是当前root下的直接子文件夹(不包括子文件夹的子文件夹,因为后续会遍历到),而files是当前root下的文件。但用户要的是“所有”文件和子文件夹,所以我们需要收集每个root下的dirs和files(注意:每个文件夹都会作为root出现,所以每个文件夹下的子文件夹和文件都会被收集)但是,注意:子文件夹的名字包括其所在路径的相对性,用户只要求名字,所以我们可以直接收集各个dirs列表中的元素和files列表中的元素。另外,注意:子文件夹的名字会被重复收集吗?不会,因为每个文件夹只会在它父目录的root下被收集一次(作为直接子文件夹)。不过,用户可能希望区分文件和文件夹?问题中并没有要求分开,但根据常理,我们可以分开两个列表:一个放所有文件夹名(包括各级子文件夹),一个放所有文件名。但注意:os.walk返回的dirs只包含当前目录下的直接子文件夹名(不包含路径),所以我们可以直接收集这些名字。同样,files是当前目录下的文件名。因此,步骤:1.初始化两个列表:dir_list用于存放所有子文件夹的名字,file_list用于存放所有文件的名字。2.使用os.walk遍历指定路径。3.对于每次遍历到的root,dirs,files:将dirs中的每个文件夹名添加到dir_list(注意:这里就是当前目录下的直接子文件夹)将files中的每个文件名添加到file_list4.注意:这样收集到的文件夹名和文件名都是相对路径吗?不,它们都是当前遍历到的目录下的直接子项,所以是单个名字(没有路径前缀)。但是,这样会有一个问题:不同目录下可能有同名文件或文件夹。而用户只要名字,所以可能会重复。但是用户要求的是所有名字,重复也是正常的。如果用户希望得到唯一的名字集合,可以set一下,但用户没有说,我们就按重复保留。另外,注意:顶层目录本身不会被包含在dirs中,因为os.walk是从顶层目录开始,而它的dirs是顶层目录下的子目录。所以用户如果想要包含顶层目录本身吗?题目没有说,通常我们只要求子文件夹(不包括指定的根目录)。如果用户需要包含,可以单独处理,但题目要求“子文件夹”,通常不包括根目录自身。另外,用户如果指定路径为"C:\\example",那么os.walk会遍历这个路径下的所有内容,返回的root包括"C:\\example"和它的所有子目录。但是,在dirs中,我们只收集了每个root下的直接子文件夹。所以,我们收集到的文件夹就是所有除根目录以外的文件夹(根目录下的子文件夹,以及子文件夹的子文件夹等)。因此,我们并没有收集根目录(例如"C:\\example"),这符合“子文件夹”的要求。所以,我们可以写如下代码:注意:用户没有要求排除隐藏文件,所以不做过滤。如果要求排除,可以按照隐藏文件的规则(例如以点开头或以其他方式)在添加到列表前判断。由于用户可能希望得到两个列表:文件夹名列表和文件名列表。代码如下:</think> 要获取指定路径下所有文件和子文件夹的名称列表,可以使用Python的`os.walk`函数配合集合收集名称。以下是具体实现: ### 解决方案代码 ```python import os def get_all_items(path): """获取路径下所有文件和子文件夹的名称列表""" dirs_set = set() # 存储所有子文件名称 files_set = set() # 存储所有文件名称 # 遍历目录树 for root, dirs, files in os.walk(path): # 添加当前目录的直接子文件名称 dirs_set.update(dirs) # 添加当前目录的文件名称 files_set.update(files) # 返回两个列表:子文件夹列表、文件列表 return list(dirs_set), list(files_set) # 示例用法 target_path = "your/path/here" dirs_list, files_list = get_all_items(target_path) print("子文件名称:", dirs_list) print("文件名称:", files_list) ``` ### 关键点说明 1. **使用集合存储**:通过集合自动去重,避免重复添加同名项 2. **`os.walk`工作原理**: - 返回三元组 `(root, dirs, files)` - `dirs`:当前目录下的直接子文件名称列表 - `files`:当前目录下的直接文件名称列表 3. **topdown参数**:默认为`True`(从上至下遍历),符合常规需求[^3] ### 扩展说明 - **排除隐藏文件**:在循环内部添加过滤逻辑(示例): ```python # 排除隐藏文件(Unix/Mac系统) dirs[:] = [d for d in dirs if not d.startswith('.')] files = [f for f in files if not f.startswith('.')] ``` ### 注意事项 - 返回的**名称不含完整路径**,仅包含基名称(basename) - 结果包含**所有层级**的子文件夹和文件,不仅仅是直接子项
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值