【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. globfnmatch 结合进行筛选

    如果你想获取特定类型的文件(如 .txt.jpg 等),可以结合 globfnmatch 进行筛选。

    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") 获取指定类型的文件

    作者:彬彬侠

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python】获取指定目录文件与子目录列表的os.listdir()函数详解

    发表回复