我正在编写一个脚本,以递归方式遍历主文件夹中的子文件夹,并根据某种文件类型构建一个列表。我的脚本有问题。目前设置如下:
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 循环并加入路径的第一部分,但我想我会仔细检查是否有人在此之前有任何建议。
最佳答案
您应该使用您称为 root
的 dirpath
。提供了 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/