pin_drop当前位置:知识文库 ❯ 图文
Python os.listdir()列出目录内容用法详解 - 完整示例与对比
一、os.listdir() 概述
os.listdir() 是 Python os 模块中最常用的函数之一,用于获取指定目录下的所有条目(文件和子目录)的名称列表。它只返回目录中第一层的条目名称,不递归进入子目录。
该函数返回的条目名称是纯字符串,不包含路径前缀。如果需要完整路径,需要手动与目录路径拼接。同时,它不区分文件和目录,需要配合 os.path.isfile() 和 os.path.isdir() 进行判断。
二、语法与参数说明
函数语法
代码示例
os.listdir(path='.')参数说明
三、返回值
返回一个 list,其中包含指定目录中所有条目的名称字符串。如果目录为空,则返回空列表 []。
-
包含内容:所有文件、目录、符号链接、隐藏文件(如 .gitignore)
-
不包含:特殊目录条目
.和.. -
顺序:返回顺序不保证排序,取决于操作系统文件系统
四、代码示例
示例1:列出当前目录内容
代码示例
import os
items = os.listdir('.')
print(f"当前目录内容 ({len(items)} 项):")
for item in sorted(items):
print(f" {item}")输出结果:
代码示例
当前目录内容 (5 项):
config.ini
data
main.py
README.md
utils示例2:区分文件和目录
代码示例
import os
path = '.'
files = []
dirs = []
for item in os.listdir(path):
full_path = os.path.join(path, item)
if os.path.isfile(full_path):
files.append(item)
elif os.path.isdir(full_path):
dirs.append(item)
print(f"文件: {sorted(files)}")
print(f"目录: {sorted(dirs)}")输出结果:
代码示例
文件: ['config.ini', 'main.py', 'README.md']
目录: ['data', 'utils']示例3:按扩展名筛选文件
代码示例
import os
# 筛选所有 Python 文件
py_files = [f for f in os.listdir('.') if f.endswith('.py')]
print(f"Python文件: {py_files}")
# 收集所有扩展名
all_extensions = set()
for f in os.listdir('.'):
full_path = os.path.join('.', f)
if os.path.isfile(full_path):
ext = os.path.splitext(f)[1]
all_extensions.add(ext)
print(f"所有扩展名: {sorted(all_extensions)}")输出结果:
代码示例
Python文件: ['main.py']
所有扩展名: ['.ini', '.md', '.py']五、实际应用场景
-
文件管理器:在图形界面或命令行文件管理器中展示当前目录的文件和子目录列表
-
批量处理脚本:遍历目录下所有文件,进行格式转换、数据清洗、图片压缩等批量操作
-
自动化测试验证:在测试脚本执行后,检查输出目录是否生成了预期的结果文件
六、注意事项
注意:os.listdir() 返回的是纯名称列表,不包含完整路径。如需完整路径,必须使用
os.path.join()拼接。
注意:返回结果不保证排序**。不同操作系统和文件系统可能返回不同顺序,如需固定顺序请使用
sorted()。
注意:os.listdir() 不递归遍历子目录。如果需要递归遍历整个目录树,请使用
os.walk()。
小贴士
Python 3.5+ 推荐使用 os.scandir() 替代 os.listdir()。os.scandir() 返回 DirEntry 对象,可以直接获取文件类型和属性,无需额外的系统调用,性能显著优于 os.listdir(),特别是在大目录下。
七、列出目录方法对比
八、常见问题 FAQ
os.listdir() 能否列出隐藏文件?
可以。os.listdir() 会列出目录中的所有条目,包括以点号(.)开头的隐藏文件(如 .gitignore、.env)。如果你不想包含隐藏文件,需要在代码中过滤掉以 '.' 开头的名称。
如何递归遍历目录及其所有子目录?
使用 os.walk() 函数。它会逐层递归遍历目录树,每次迭代返回一个三元组 (dirpath, dirnames, filenames),分别表示当前目录路径、子目录列表和文件列表。这是 Python 中最常用的递归目录遍历方法。
os.listdir() 和 os.scandir() 哪个更好?
在大多数场景下 os.scandir() 更好,特别是在需要判断文件类型时。os.listdir() 返回纯字符串,后续调用 os.path.isfile() 或 os.stat() 会产生额外的系统调用。而 os.scandir() 返回的 DirEntry 对象已经缓存了这些信息,性能更优。不过对于简单场景,os.listdir() 仍然足够使用。
指定路径不存在时会怎样?
会抛出 FileNotFoundError 异常。建议在调用 os.listdir() 前先用 os.path.exists() 检查路径是否存在,或使用 try/except 捕获异常进行优雅处理。
练习题
练习1
编写程序,列出当前目录下所有 .py 文件,并按文件名排序后输出文件数量及每个文件名。
练习2
编写函数 count_file_types(base_path),递归统计指定目录下各类型文件(按扩展名分类)的数量。提示:结合 os.walk() 使用。
本文涉及AI创作
内容由AI创作,请仔细甄别