【问题描述】使用Python如何获取多级目录的文件和文件夹清单呢?
多级目录示例如下:
【小千解答】可以使用以下4种方法:
1. os.walk ===
import os import pprint xqpath = 'd:\\xqoffice' xqdir = [] xqfile = [] for root,dirs,files in os.walk(xqpath): xqdir += dirs xqfile += files pprint.pprint(xqdir) pprint.pprint(xqfile)
2. os.listdir===
import os import pprint xqpath = 'd:\\xqoffice' xqdir = [] xqfile = [] def xqgetlist(refpath,arrdir,arrfile): for xqname in os.listdir(refpath): objpath = os.path.join(refpath,xqname) if os.path.isdir(objpath): arrdir.append(xqname) xqgetlist(objpath,arrdir,arrfile) else: arrfile.append(xqname) xqgetlist(xqpath,xqdir,xqfile) pprint.pprint(xqdir) pprint.pprint(xqfile)
3. os.scandir===
import os import pprint xqpath = 'd:\\xqoffice' xqdir = [] xqfile = [] def xqgetlist(refpath,arrdir,arrfile): for obj in os.scandir(refpath): if obj.is_dir(): arrdir.append(obj.name) xqgetlist(obj.path,arrdir,arrfile) else: arrfile.append(obj.name) xqgetlist(xqpath,xqdir,xqfile) pprint.pprint(xqdir) pprint.pprint(xqfile)
4. glob.glob===
import os import glob import pprint xqpath = 'd:\\xqoffice' xqdir = [] xqfile = [] for xqname in glob.glob(xqpath+'\**\*',recursive=True): if os.path.isdir(xqname): xqdir.append(xqname.split('\\')[-1]) else: xqfile.append(os.path.basename(xqname)) pprint.pprint(xqdir) pprint.pprint(xqfile)
4种方法比较如下:
备注:glob.glob('**',recursive=True)可以实现递归,若结果不想包含根目录,可以调整第一参数,比如改成'**\*',修改前后对比如下:
【参考资料】