【Python】获取指定目录文件与子目录列表的os.listdir()函数详解
os.listdir()
函数
os.listdir()
是 Python os
模块中的一个函数,用于获取指定目录中的文件和子目录的列表。它返回一个包含 目录内容 的 列表,但不会递归进入子目录。
1. os.listdir()
语法
import os
os.listdir(path=".")
参数:
path
(可选):要列出文件和目录的路径,默认为当前目录(.
)。返回类型:
list
),其中的元素是文件和目录的名称(字符串)。2. 基本用法示例
2.1 列出当前目录中的所有文件和文件夹
import os
# 列出当前目录的所有文件和子目录
file_list = os.listdir()
print(file_list)
2.2 列出指定目录中的所有文件和子目录
import os
# 指定一个目录
path = "/path/to/directory"
# 列出该目录下的所有文件和子目录
file_list = os.listdir(path)
print(file_list)
3. 配合 os.path
进行筛选
3.1 区分文件和目录
os.listdir()
只返回名称,如果你想要区分文件和目录,需要使用 os.path.isdir()
和 os.path.isfile()
。
import os
path = "/path/to/directory"
all_items = os.listdir(path)
# 过滤出文件
files = [f for f in all_items if os.path.isfile(os.path.join(path, f))]
print("Files:", files)
# 过滤出目录
directories = [d for d in all_items if os.path.isdir(os.path.join(path, d))]
print("Directories:", directories)
4. 与 glob
和 fnmatch
结合进行筛选
如果你想获取特定类型的文件(如 .txt
、.jpg
等),可以结合 glob
或 fnmatch
进行筛选。
4.1 使用 glob
获取特定类型的文件
import glob
# 获取当前目录下所有的 .txt 文件
txt_files = glob.glob("*.txt")
print(txt_files)
4.2 使用 fnmatch
进行文件匹配
import os
import fnmatch
path = "/path/to/directory"
all_files = os.listdir(path)
# 只匹配 .txt 文件
txt_files = [f for f in all_files if fnmatch.fnmatch(f, "*.txt")]
print(txt_files)
5. 遍历所有文件(包括子目录)
os.listdir()
只返回 当前目录 下的内容,不会递归进入子目录。如果你需要遍历所有子目录,可以使用 os.walk()
。
import os
path = "/path/to/directory"
for root, dirs, files in os.walk(path):
print("Current directory:", root)
print("Subdirectories:", dirs)
print("Files:", files)
6. 与 sorted()
结合使用
可以对 os.listdir()
返回的列表进行排序,按照名称、大小或修改时间排序。
6.1 按文件名排序
import os
path = "/path/to/directory"
sorted_list = sorted(os.listdir(path))
print(sorted_list)
6.2 按文件大小排序
import os
path = "/path/to/directory"
files = os.listdir(path)
# 获取按大小排序的文件列表
sorted_files = sorted(files, key=lambda f: os.path.getsize(os.path.join(path, f)))
print(sorted_files)
6.3 按修改时间排序
import os
path = "/path/to/directory"
files = os.listdir(path)
# 获取按修改时间排序的文件列表
sorted_files = sorted(files, key=lambda f: os.path.getmtime(os.path.join(path, f)))
print(sorted_files)
7. os.scandir()
vs os.listdir()
Python 3.5 以后,推荐使用 os.scandir()
,它比 os.listdir()
更高效,并且可以直接获取文件类型、大小等信息。
import os
path = "/path/to/directory"
with os.scandir(path) as entries:
for entry in entries:
print(f"Name: {entry.name}, Is file: {entry.is_file()}, Is directory: {entry.is_dir()}")
8. 总结
方法 | 说明 |
---|---|
os.listdir(path) |
获取目录下的所有文件和子目录(不包括路径) |
os.path.isfile(path) |
判断路径是否是文件 |
os.path.isdir(path) |
判断路径是否是目录 |
os.walk(path) |
递归遍历目录下的所有文件和子目录 |
os.scandir(path) |
更高效的目录遍历方式 |
sorted(os.listdir(path)) |
按文件名排序 |
glob.glob("*.txt") |
获取指定类型的文件 |
作者:彬彬侠