python 遍历所有的子文件夹、子文件-os.scandir()

说明

os.scandir()函数是用来扫描一个目录中的 所有文件和子目录的

这个函数取代了Python2中的 os.listdir()函数,使用更加方便

缺点

如果只获取所有子文件,有点麻烦

使用

打印指定目录下的文件夹、文件

import os

path = r"C:\Users\mym\Desktop"

for item in os.scandir(path):
    print(item)

执行结果:

<DirEntry '啊啊啊dsf定时.txt'>
<DirEntry '新建文件夹'>
<DirEntry '新建文件夹 (2)'>
<DirEntry '新建文件夹 (3)'>
<DirEntry '测试'>

解释

在使用 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/


原文出处:/show_1IX7RpEx0uWG.html