Recursively iterate through all subdirectories using pathlib

若如初见. 提交于 2020-01-10 03:28:07

问题


How can I use pathlib to recursively iterate over all subdirectories of a given directory?

p = Path('docs')
for child in p.iterdir(): child

only seems to iterate over the immediate children of a given directory.

I know this is possible with os.walk() or glob, but I want to use pathlib because I like working with the path objects.


回答1:


You can use the glob method of a Path object:

p = Path('docs')
for i in p.glob('**/*'):
     print(i.name)



回答2:


Use Path.rglob (substitutes the leading ** in Path().glob("**/*")):

path = Path("docs")
for p in path.rglob("*"):
     print(p.name)



回答3:


pathlib has glob method where we can provide pattern as an argument.

For example : Path('abc').glob('**/*.txt') - It will look for current folder abc and all other subdirectories recursively to locate all txt files.




回答4:


Use list comprehensions:

(1) [f.name for f in p.glob("**/*")]  # or
(2) [f.name for f in p.rglob("*")]

You can add if f.is_file() or if f.is_dir() to (1) or (2) if you want to target files only or directories only, respectively. Or replace "*" with some pattern like "*.txt" if you want to target .txt files only.

See this quick guide.



来源:https://stackoverflow.com/questions/50714469/recursively-iterate-through-all-subdirectories-using-pathlib

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!