一. 项目需求

网上好多方法都是遍历文件和文件夹,而本方法是只获取一级文件夹名称不包含文件。
Python listdir只展示文件夹,使用listdir()提取子目录内容却无法过滤文件,希望结果list仅保留文件夹。

二. 代码实现

调用next()函数,系统自带函数,配合os.walk()

import os

path = r'C:\User\123\Desktop'
path_list = next(os.walk(path))[1]

如果需要绝对路径,也可以提取(dirpath, dirnames, filenames)拼接,网上有众多方法,此处不再赘述。

三. 输出示例

目录结构:

|--Desktop
	|--目录1
    	|--目录1.1
    	|--文件1.2.pdf
   	|--目录2
   	|--目录3
     	|--文件3.1
   	|--文件4.txt
   	|--文件5.jpg

输出结果:

path_list = ['目录1','目录2','目录3']

四. 拓展知识

1、os.walk()的用法

定义:

os.walk(top, topdown=True, onerror=None, followlinks=False)

说明:

  • top:指定遍历目录的地址
  • topdown:默认为真,含义是优先遍历指定的目录地址,否则优先遍历目录下的子目录
  • onerror:指定一个 callable 对象,这个是当发生异常的时候,会调用
  • followlinke:默认为假,含义是不遍历目录下的快捷方式

返回:
os.walk()的返回值是一个可遍历的对象,每次遍历返回的是一个三元元组,可用root,dirs,files接收

  • root:遍历到某目录的地址
  • dirs:list 对象,存储遍历到该目录下的子目录名称
  • files:list 格式,存储遍历到该目录下的文件

2、os.listdir() 的用法

定义:

os.listdir(path)

说明:

  • path:要打开的文件目录路径

返回:
os.listdir的返回值是一个列表,列表里面存储该path下面的子目录的名称

示例:
如果想得到最后的文件,可以通过os.path.join来连接字符串,然后不停的遍历,获取到最后的文件

import os

path = r'C:\User\123\Desktop'
file_paths = []

for root, dirs, files in os.walk(path):
	for file in files:
		file_paths.append(os.path.join(root, file))
		
print(file_paths)

五. 参考链接

  1. filesystems - How to list only top level directories in Python? - Stack Overflow
  2. Python遍历目录下的文件(os.walk 、os.listdir的用法)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐