我正在寻找一个在python中搜索特定子目录的选项。
例如像这样的目录结构:
some_files/
common/
2009/
2010/
2011/
...
我只想在以2开头的子目录中搜索,因此它必须类似于'some_files / 2 *'。我认为必须使用glob.glob和os.walk(),但我无法使用它。
现在我使用:
files = [os.path.join(dirpath, f)
for dirpath, dirnames, files in os.walk(d)
for f in files if f.endswith(ext)]
但这不符合特定需求。
有人可以帮助我,非常感谢!
答案 0 :(得分:3)
我会这样使用pathlib(现在是Python3标准库的一部分):
from pathlib import Path
for subpath in Path().glob("2*):
for file in subpath.glob("*.ext"):
# ...
更新: pathlib也可用于Python 2.x(它已反向移植并发布到Python Package Index )。简单地:
$ pip install pathlib
答案 1 :(得分:2)
您可以使用带dirpath的glob来查找匹配的目录:
from glob import iglob
import os
files = []
ext = "py"
for dirpath, dirnames, file in os.walk(path):
match = next(iglob(os.path.join(dirpath, "2*")),"")
if match:
files.extend(iglob(os.path.join(match,"*.{}".format(ext))))
print(files)
或者,如果你真的想要一个列表comp:
files = [f for dirpath, dirnames, file in os.walk(path) for f in
iglob(os.path.join(next(iglob(os.path.join(dirpath, "2*")),
'\\\\'), "*.{}".format(ext)))]
print(files)