python的os库虽有os.listdir()函数获取当前目录文件列表,但在实际使用过程中如果要查找某种类型的文件,或者遍历所有子目录查找,代码就显得累赘,不如DOS命令的dir那么简洁明了。为了方便获取目录下的文件,我自己写了两个Python函数:dir_b和dir_s,分别模拟DOS的dir /b 以及dir /b /s 命令,支持*.*匹配符,返回文件列表。
import os
## 模拟DOS命令 dir /b 列出当前目录文件
def dir_b(path,ext):
ll=[]
if ext[0]=='*': ext=ext[1:]
if ext[-1:]=='*':
extlen=len(ext)
ext=ext[:-1]
for name in os.listdir(path):
if os.path.splitext(name)[1][:extlen-1]==ext:
ll.append(os.path.join(path,name))
else:
for name in os.listdir(path):
if os.path.splitext(name)[1]==ext:
ll.append(os.path.join(path,name))
return ll
## 模拟DOS命令 dir /s /b 遍历所有目录
def dir_s(path,ext):
ll=[]
if ext[0]=='*': ext=ext[1:]
if ext[-1:]=='*':
extlen=len(ext)
ext=ext[:-1]
for root, dirs, files in os.walk(path):
for name in files:
if os.path.splitext(name)[1][:extlen-1]==ext:
ll.append(os.path.join(root,name))
else:
for root, dirs, files in os.walk(path):
for name in files:
if os.path.splitext(name)[1]==ext:
ll.append(os.path.join(root,name))
return ll
if __name__=='__main__':
path=r'c:\Users\Administrator\Downloads'
ext='*.jpg'
print(f"{'='*60}\n模拟DOS命令:dir /b {ext}\n")
filelist1=dir_b(path,ext)
for i in filelist1:
print(i)
print(f'合计:{len(filelist1)}个文件。')
print(f"\n{'='*60}\n模拟DOS命令:dir /b /s {ext}\n")
filelist2=dir_s(path,ext)
for i in filelist2:
print(i)
print(f'合计:{len(filelist2)}个文件。')
运行代码截图: