在 python 中递归查找文件的干净方法

Dav*_*rks 3 python python-3.x python-3.6

给定以下目录结构:

myDir
   file1.c
   file2.c
   subDirA
      file3.c
   subDirB
      file4.c
Run Code Online (Sandbox Code Playgroud)

我想*.c用 glob 或其他类似的有效方法(不使用os.walk其他地方记录的方法)查找文件。

我遇到的问题是,鉴于路径,myDir我无法c在一行代码中递归获取所有文件。

glob.glob('myDir/*.c', recursive=True) 
Run Code Online (Sandbox Code Playgroud)

只产生file1file2。和

glob.glob('myDir/**/*.c', recursive=True
Run Code Online (Sandbox Code Playgroud)

只产生file3file4

有没有一种很好的干净的方法将这两个语句组合成一个?看起来肯定会有。

wim*_*wim 7

使用pathlib

from pathlib import Path
Path('/to/myDir').glob('**/*.c')
Run Code Online (Sandbox Code Playgroud)

至于为什么 glob 对你不起作用:

glob.glob('myDir/**/*.c', recursive=True)
             ^
             |___ you had a lower d here?
Run Code Online (Sandbox Code Playgroud)

确保您在 myDir 的父级中运行它,并且您的 Python 版本是 3.5+。

  • 虽然我确实喜欢 `pathlib`,但 `glob.glob('myDir/**/*.c', recursive=True)` 应该可以工作,至少,当我创建具有相同结构的目录树时,它对我有用。 .. (3认同)