Python 列出目录、子目录和文件

新手上路,请多包涵

我正在尝试制作一个脚本来列出给定目录中的所有目录、子目录和文件。

我试过这个:

 import sys, os

root = "/home/patate/directory/"
path = os.path.join(root, "targetdirectory")

for r, d, f in os.walk(path):
    for file in f:
        print(os.path.join(root, file))

不幸的是,它不能正常工作。

我得到了所有文件,但没有得到它们的完整路径。

例如,如果 dir 结构是:

/home/patate/directory/targetdirectory/123/456/789/file.txt

它会打印:

/home/patate/directory/targetdirectory/file.txt

我需要的是第一个结果。任何帮助将不胜感激!谢谢。

原文由 thomytheyon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 473
2 个回答

使用 os.path.join 连接 目录 和文件 _名_:

 for path, subdirs, files in os.walk(root):
    for name in files:
        print(os.path.join(path, name))

请注意在串联中使用 path 而不是 root ,因为使用 root 是不正确的。


在 Python 3.4 中,添加了 pathlib 模块以简化路径操作。所以相当于 os.path.join 将是:

 pathlib.PurePath(path, name)

pathlib 的优点是您可以在路径上使用各种有用的方法。如果您使用具体的 Path 变体,您还可以通过它们进行实际的操作系统调用,例如切换到目录、删除路径、打开它指向的文件等等。

原文由 Eli Bendersky 发布,翻译遵循 CC BY-SA 4.0 许可协议

以防万一……获取目录和子目录中的所有文件匹配某种模式(例如\* .py):

 import os
from fnmatch import fnmatch

root = '/some/directory'
pattern = "*.py"

for path, subdirs, files in os.walk(root):
    for name in files:
        if fnmatch(name, pattern):
            print(os.path.join(path, name))

原文由 Ivan Pirog 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题