python 遍历所有的子文件夹、子文件-os.scandir() 作者:马育民 • 2024-04-04 10:47 • 阅读:10061 # 说明 `os.scandir()`函数是用来扫描一个目录中的 **所有文件和子目录的** 这个函数取代了Python2中的 `os.listdir()`函数,使用更加方便 ### 缺点 如果只获取所有子文件,有点麻烦 # 使用 打印指定目录下的文件夹、文件 ``` import os path = r"C:\Users\mym\Desktop" for item in os.scandir(path): print(item) ``` 执行结果: ``` ``` ## 解释 在使用 `os.scandir()` 函数扫描目录时,会返回一个包含目录中每个项目信息的生成器,生成器每次返回的是一个 `os.DirEntry` 对象,这个对象包含了目录中每个项目的详细信息: #### os.DirEntry对象属性: - name:表示扫描器当前位置的项目的名称,如果当前项是一个目录,则名称不包含路径。 - path:表示扫描器当前位置的项目的全路径,如果该项是一个目录,则路径包含该目录。 - inode:表示扫描器当前位置的项目的节点号。 #### os.DirEntry对象方法: - is_dir():用于判断当前项是否为目录,返回一个布尔值。 - is_file():用于判断当前项是否为文件,返回一个布尔值。 - is_symlink():用于判断当前项是否为符号链接,返回一个布尔值。 - stat():返回当前项的stat()结构体,包含了文件大小、修改时间等信息。 - lstat():类似于stat()方法,但是不会解析符号链接指向的文件信息。 # 高级用法 ### 遍历指定目录 打印指定目录下的 所有子文件夹、所有子文件 ``` import os def walk(path): for item in os.scandir(path): if item.is_dir(): print("目录:",item.path) walk(item.path) elif item.is_file(): print("文件:",item.path) path = r"C:\Users\mym\Desktop" walk(path) ``` ### 遍历指定目录,并过滤 打印指定目录下的 所有子文件夹、所有子文件,过滤掉不要的文件夹 ``` import os def walk(path): for item in os.scandir(path): if item.is_dir(): name = os.path.basename(item.path) if name == "游戏": # 过滤掉 游戏目录 continue print("目录:",item.path) walk(item.path) elif item.is_file(): print("文件:",item.path) path = r"C:\Users\mym\Desktop" walk(path) ``` ### 遍历指定目录,将文件夹、文件保存到list ``` import os def walk(path,files:list,dirs:list): ''' 遍历文件夹、文件(不包含版本库文件件) :param path: :param files: 保存文件 :param dirs: 保存目录 :return: ''' for item in os.scandir(path): if item.is_dir(): # print("目录:",item.path) dirs.append(item.path) walk(item.path,files,dirs) elif item.is_file(): # print("文件:",item.path) files.append(item.path) path = r"C:\Users\mym\Desktop\重庆发票" files = [] dirs = [] walk(path,files,dirs) print(files) print(dirs) ``` 参考: https://pythonjishu.com/python-os-14/ 原文出处:https://malaoshi.top/show_1IX7RpEx0uWG.html