如何在 Python 中使用 os.walk 获取特定文件或目录列表?
Posted
技术标签:
【中文标题】如何在 Python 中使用 os.walk 获取特定文件或目录列表?【英文标题】:How to fetch a specific file or directory list using os.walk in Python? 【发布时间】:2013-02-13 22:58:39 【问题描述】:我想知道是否可以通过索引号检索 os.walk 类中特定子文件夹中的特定文件。
我还想知道如何仅列出 os.walk 中特定级别的子目录,例如仅列出根目录的子目录。我可以列出所有子目录,我可以看到第一级子目录的列表首先组合在一起,但是我找不到不使用循环来过滤掉这些子目录的方法......
这样的东西部分有效(改编自另一个问题),但我不知道如何从一个级别过滤文件夹:
dirs[:] = [d for d in dirs if re.match('anyname_\d3', d, flags=0)]
使用 type 命令时 os.walk 元组显示为“列表”,尝试使用索引号时出现的一些错误指的是字典对象的不当使用。我很困惑。
谢谢!
【问题讨论】:
也许您只是在寻找os.listdir('/path/to/dir')
而不是 os.walk
...?
【参考方案1】:
尚不完全清楚您想要做什么,但我可以提供一个示例(我认为)做了足够多的事情,您可以弄清楚如何做您想做的事情:打印每个名为的目录中第三个文件的路径名"anyname" 正好比顶部低两层:
for dirpath, dirnames, filenames in os.walk(top):
depth = os.path.relpath(dirpath, top).count(os.pathsep)
if depth == 2 and os.path.basename(dirpath) == "anyname":
print(os.path.join(dirpath, filenames[2]))
您可以通过修剪 walk
甚至不查看超过 2 层的目录来提高效率:
for dirpath, dirnames, filenames in os.walk(top):
depth = os.path.relpath(dirpath, top).count(os.pathsep)
if depth == 2:
if os.path.basename(dirpath) == "anyname":
print(os.path.join(dirpath, filenames[2]))
dirnames.clear()
或者,更有效但更复杂一点的是,修剪所有未命名为“anyname”的深度 2 目录:
for dirpath, dirnames, filenames in os.walk(top):
depth = os.path.relpath(dirpath, top).count(os.pathsep)
if depth == 1:
dirnames[:] = ["anyname"] if "anyname" in dirnames else []
elif depth == 2:
print(os.path.join(dirpath, filenames[2]))
dirnames.clear()
【讨论】:
以上是关于如何在 Python 中使用 os.walk 获取特定文件或目录列表?的主要内容,如果未能解决你的问题,请参考以下文章
Python3.x:os.listdir和os.walk(获取路径方法)的区别
python使用os.listdir和os.walk获得文件的路径