【问题描述】使用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)可以实现递归,若结果不想包含根目录,可以调整第一参数,比如改成'**\*',修改前后对比如下:


【参考资料】