Python 深度优先的方法获取目录下的所有文件名

本文介绍了一个使用Python的os模块进行文件目录深度遍历的方法,通过递归地列出指定目录下的所有子目录和非目录子文件,适用于文件系统管理、自动化任务等场景。
import os

def file_name(file_dir):
    for root, dirs, files in os.walk(file_dir):
        print(root)  # 当前目录路径
        print(dirs)  # 当前路径下所有子目录
        print(files)  # 当前路径下所有非目录子文件

同时获取三个对象,当前目录,当前路径下的所有子目录与当前路径下所有非目录子文件,如果当前路径下的子目录不为空,则继续深度遍历。

参考链接:
https://blog.youkuaiyun.com/qubeijun/article/details/89674207

<think> 我们根据用户的问题和提供的引用资料,总结出用户需要的是使用Python打印目录文件名方法。在之前的回答中,我们已经详细介绍了多种方法,现在根据用户提供的引用资料(特别是引用[1]、[3])来给出一个简洁且有针对性的回答。 用户引用资料重点: - 引用[1]:展示了使用递归方式打印目录结构(包括文件和文件夹)的代码,其中使用了`os.listdir`和`os.path`模块的方法。 - 引用[3]:提到了`os.walk`和`os.listdir`两种方法获取指定目录下的所有文件名。 因此,我们重点介绍这两种方法(非递归和递归)来打印文件名。 ### 回答思路: 1. **非递归方法(单层目录)**:使用`os.listdir`或`os.scandir`获取当前目录下的文件和子目录,然后过滤出文件并打印。 2. **递归方法(多层目录)**:使用`os.walk`或自定义递归函数(如引用[1]中的方法)遍历所有子目录,打印每个目录下的文件。 ### 具体代码实现: #### 方法1:使用`os.listdir`(单层目录) ```python import os def print_files_in_directory(directory): # 检查目录是否存在 if not os.path.exists(directory): print(f"目录 '{directory}' 不存在") return # 获取目录下所有条目 entries = os.listdir(directory) # 遍历条目,打印文件名(不包括子目录) for entry in entries: # 拼接完整路径 full_path = os.path.join(directory, entry) # 判断是否为文件 if os.path.isfile(full_path): print(entry) # 只打印文件名,不包括路径 # 示例:打印当前目录下的文件名 print_files_in_directory('.') ``` #### 方法2:使用`os.walk`(递归遍历所有子目录) ```python import os def print_all_files(directory): # 检查目录是否存在 if not os.path.exists(directory): print(f"目录 '{directory}' 不存在") return # 使用os.walk递归遍历 for root, dirs, files in os.walk(directory): for file in files: # 打印文件名(包括相对路径) # 如果只想打印文件名而不带路径,则直接打印file print(os.path.join(root, file)) # 打印完整路径 # 如果只打印文件名,则使用: print(file) # 示例:打印当前目录及其子目录下的所有文件 print_all_files('.') ``` #### 方法3:自定义递归函数(类似引用[1]) 引用[1]中的代码不仅打印文件名,还打印目录结构,并使用了层级缩进。我们可以修改一下,只打印文件名(不带目录结构): ```python import os def print_files_recursive(path): if not os.path.exists(path): print(f"路径 '{path}' 不存在") return # 获取当前路径下的所有条目 for entry in os.listdir(path): full_path = os.path.join(path, entry) if os.path.isfile(full_path): # 打印文件名(或者full_path) print(entry) # 只打印文件名 else: # 如果是目录,则递归 print_files_recursive(full_path) # 示例 print_files_recursive('.') ``` ### 注意事项: - **路径表示**:在Windows中路径分隔符为`\`,在Linux/macOS中为`/`,使用`os.path.join`可以自动处理。 - **隐藏文件**:以上方法会包括隐藏文件(以`.`开头的文件),如果需要排除,可以在打印前判断文件名。 - **性能**:对于非常大的目录树,递归方法(特别是自定义递归)可能会遇到递归深度限制,此时使用`os.walk`更稳妥。 ### 引用资料说明: - 方法1和3参考了引用[1]中`os.listdir`和递归遍历的思想[^1]。 - 方法2参考了引用[3]中提到的`os.walk`方法[^3]。 ### 相关问题 根据用户之前的问题,我们生成以下相关问题: §§相关问题§§ 1. 如何只打印特定扩展名的文件(例如所有.txt文件)? 2. 如何在遍历目录时排除隐藏文件或系统文件? 3. 使用`os.walk`遍历目录时如何避免符号链接导致的循环? </think> ### Python打印目录文件名的实现方法Python中,打印目录下的文件名可以通过多种方法实现。以下是三种常用方法,根据您的需求选择即可: #### 1. **单层目录打印(不递归子目录)** 使用 `os.listdir()` 或 `os.scandir()` 获取当前目录下的文件: ```python import os def print_files(directory): """打印指定目录下的所有文件名(不包含子目录)""" print(f"目录 {directory} 下的文件:") for entry in os.scandir(directory): if entry.is_file(): print(f"📄 {entry.name}") # 用法示例 print_files(r'D:\your_directory') # 替换为您的目录路径 ``` - **输出示例**: ``` 目录 D:\your_directory 下的文件: 📄 report.pdf 📄 data.xlsx 📄 image.jpg ``` - **特点**:快速简单,不进入子目录[^1][^2] #### 2. **递归打印所有子目录文件** 使用 `os.walk()` 遍历整个目录树: ```python import os def print_all_files(root_dir): """递归打印目录及其子目录下所有文件名""" for root, _, files in os.walk(root_dir): print(f"\n📍 目录: {root}") for file in files: print(f" └ {file}") # 用法示例 print_all_files(r'D:\your_directory') ``` - **输出示例**: ``` 📍 目录: D:\your_directory └ report.pdf └ data.xlsx 📍 目录: D:\your_directory\subfolder └ config.ini └ backup.zip ``` - **特点**:完整遍历所有子目录,清晰展示目录结构[^3] #### 3. **带缩进的目录树打印** 结合递归和缩进展示层级关系(类似文件资源管理器): ```python import os def print_tree(directory, level=0): """带缩进打印目录树结构""" indent = ' ' * level for entry in os.scandir(directory): if entry.is_file(): print(f"{indent}├ {entry.name}") elif entry.is_dir(): print(f"{indent}📁 {entry.name}") print_tree(entry.path, level + 1) # 用法示例 print(r"D:\your_directory 的目录结构:") print_tree(r'D:\your_directory') ``` - **输出示例**: ``` D:\your_directory 的目录结构: 📁 Documents ├ report.pdf ├ notes.txt 📁 Images ├ photo1.jpg ├ screenshot.png ``` - **特点**:直观展示目录层级关系[^1] #### 关键函数说明: | 函数/方法 | 用途说明 | 是否递归 | |----------------------|---------------------------------|----------| | `os.listdir()` | 获取目录下所有条目(文件+文件夹) | ❌ | | `os.scandir()` | 高效获取目录条目(可区分类型) | ❌ | | `os.walk()` | 递归遍历目录树 | ✔️ | | `os.path.isfile()` | 检查路径是否为文件 | - | > ⚠️ **注意事项**: > 1. 路径中使用原始字符串(如 `r'D:\path'`)避免转义问题 > 2. 检查目录是否存在:`if os.path.exists(directory):` > 3. 处理权限问题:用 `try-except` 捕获 `PermissionError` 这些方法都是Python标准库内置功能,无需安装第三方包,适用于Windows/Linux/macOS系统[^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值