×

python 文件 文件夹 清单 递归

获取多级目录的文件和文件夹清单

鹭岛小千 鹭岛小千 发表于2021-07-08 21:37:54 浏览1011 评论0

抢沙发发表评论

【问题描述】使用Python如何获取多级目录的文件和文件夹清单呢?

多级目录示例如下:

22-1.png


【小千解答】可以使用以下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种方法比较如下:

22-2.png

备注:glob.glob('**',recursive=True)可以实现递归,若结果不想包含根目录,可以调整第一参数,比如改成'**\*',修改前后对比如下:

22-3.png


打赏码.png


【参考资料】

  1. 详细讲解Python遍历目录的文件夹(dir)、文件(file)的三种方法:os.listdir、os.walk和os.scandir

  2. os.walk() 方法

  3. os.scandir遍历目录

  4. os.scandir文件操作

  5. Python中10个办公自动化的常用操作

  6. Python之OS模块39个常用函数详解


群贤毕至

访客