说明
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/