自编一个模拟DOS的DIR命令获取文件的Python代码

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)}个文件。')

运行代码截图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值