我正在编写一个脚本,以递归方式遍历主文件夹中的子文件夹并构建特定文件类型的列表。我的脚本有问题。目前设置如下:
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 循环并加入路径的第一部分,但我想我应该仔细检查一下是否有人在此之前有任何建议。
您应该使用dirpath
你称之为root
. The 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']
Edit:
在最近一次否决之后,我突然想到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('.')))
适用于 Python 3.4+ 的 Edit2
from pathlib import Path
result = list(Path(".").rglob("*.[tT][xX][tT]"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)