python - 如何进行递归子文件夹搜索并返回列表中的文件?

标签 python list recursion os.walk

我正在编写一个脚本,以递归方式遍历主文件夹中的子文件夹,并根据某种文件类型构建一个列表。我的脚本有问题。目前设置如下:

for root, subFolder, files in os.walk(PATH):
    for item in files:
        if item.endswith(".txt") :
            fileNamePath = str(os.path.join(root,subFolder,item))

问题在于 subFolder 变量拉入的是子文件夹列表,而不是 ITEM 文件所在的文件夹。我之前正在考虑为子文件夹运行一个 for 循环并加入路径的第一部分,但我想我会仔细检查是否有人在此之前有任何建议。

最佳答案

您应该使用您称为 rootdirpath。提供了 dirnames,因此如果存在您不希望 os.walk 递归到的文件夹,您可以对其进行修剪。

import os
result = [os.path.join(dp, f) for dp, dn, filenames in os.walk(PATH) for f in filenames if os.path.splitext(f)[1] == '.txt']

编辑:

在最近一次投票后,我突然想到 glob 是一个更好的按扩展选择的工具。

import os
from glob import glob
result = [y for x in os.walk(PATH) for y in glob(os.path.join(x[0], '*.txt'))]

也是一个生成器版本

from itertools import chain
result = (chain.from_iterable(glob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))

Edit2 for Python 3.4+

from pathlib import Path
result = list(Path(".").rglob("*.[tT][xX][tT]"))

关于python - 如何进行递归子文件夹搜索并返回列表中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18394147/

相关文章:

javascript - 变量偶尔不生成: max call stack size issue

Python:urlopen() 与 CURL

python - pandas read_csv 按列索引(不是名称)设置 `dtype`

Python 相当于 Scala 的 exists() 函数?

javascript - 我如何深入遍历一个类似 JSON 的数据结构来返回一个总的东西

java - 当我向堆栈推送较少数据时,为什么堆栈会溢出?

python - 我应该使用 Python casefold 吗?

python - SQLAlchemy IntegrityError 重复键违反唯一约束

python - 如何根据条件根据另一个相同长度的嵌套列表将列表中的项目替换为空字符串

c# - 从列表中获取请求的列不同值