递归扩展和搜索特定子目录的模式
Recursively expand and search pattern of specific subdirectories
我正在寻找一个选项来搜索 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)]
但这不符合特定需求。
谁能帮帮我,将不胜感激!
我会这样做,使用 pathlib( 现在是 Python3 std lib 的一部分):
from pathlib import Path
for subpath in Path().glob("2*):
for file in subpath.glob("*.ext"):
# ...
更新: pathlib 也可用于 Python 2.x(它已向后移植并发布到Python 包索引)。只需:
$ pip install pathlib
您可以将 glob 与 dirpath 结合使用来查找匹配的目录:
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)
或者如果你真的想要一个列表组件:
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)
我正在寻找一个选项来搜索 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)]
但这不符合特定需求。
谁能帮帮我,将不胜感激!
我会这样做,使用 pathlib( 现在是 Python3 std lib 的一部分):
from pathlib import Path
for subpath in Path().glob("2*):
for file in subpath.glob("*.ext"):
# ...
更新: pathlib 也可用于 Python 2.x(它已向后移植并发布到Python 包索引)。只需:
$ pip install pathlib
您可以将 glob 与 dirpath 结合使用来查找匹配的目录:
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)
或者如果你真的想要一个列表组件:
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)