Python 递归获取目录下所有嵌套文件夹和文件
指定层级的文件/文件夹的遍历可以通过glob.glob
/os.walk
实现,但是对于未知文件夹结构时(不知道目录下有多少层文件夹),如何获取所有多级嵌套文件(夹)没有现成的代码,这里使用递归的方案提供一个思路:
# -*- encoding: utf-8 -*-
import os
from os.path import join, isdir
# 把移动硬盘自带的两个文件夹排除
exceptFolders = ["$RECYCLE.BIN", "System Volume Information"]
def getFolders(root):
"""
获取目录root下所有嵌套文件夹的路径
"""
output = []
if isinstance(root, list):
for item in root:
output += getFolders(item)
else:
tempt = [x for x in os.listdir(root) if x not in exceptFolders]
dirs = [join(root, x) for x in tempt if isdir(join(root, x))]
if len(dirs) > 0:
output += getFolders(dirs)
else:
output.append(root)
return output
if __name__ == "__main__":
root = r"F:/"
folderList = sorted(getFolders(root))
即可得到,目录下未知文件结构的所有子文件夹的路径。
该目录下的所有文件,则可以在上述的基础上再增加如下代码获取:
def getFile(dirList):
"""
获取目录列表dirList下所有文件的路径
"""
output = []
for dir in dirList:
output += [join(dir, x) for x in os.listdir(dir) if isfile(join(dir, x))]
return output
if __name__ == "__main__":
root = r"F:/"
folderList = sorted(getFolders(root))
fileList = getFile(folderList)