建议使用os.walk代替os.listdir()----示例
Topic source这段写错:
if path == None or path == '.':
path = os.getcwd()
改为:
if dir == None or dir == '.':
dir = os.getcwd()
os.walk函数本质上是一个生成器
基本原理就是@何以不将就_写的那块代码
import os
def findstr(p,str):
for x in os.listdir(p):
path = os.path.join(p,x)
if os.path.isfile(path) and str in x :
print( path)
if os.path.isdir(path):
findstr(path,str)
每次迭代都返回三个值:
①当前路径
②当前路径中子路径(文件夹)
③当前路径中的文件(除文件夹外)
我猜测walk源码大概是一个递归函数
返回值功能类似于:
for dirname in dirnames:
return dirpath filenames walk(dirname)
其中会给三个元组分类储存
用walk函数省略了给路径分类的步骤
直接筛选出了filenames,再逐个生成,判断其中是否含有指定字符串就可以啦
很棒,感谢答主
- 1
ywjco_567
os.walk不需要自己写递归,就能遍历指定路径的目录树。
一些来自官方文的片段:
有兴趣自己到官网看看:
https://docs.python.org/zh-cn/3/library/os.html?highlight=os#os.walk
其它:遍历时尽量用生成器来输出,而不是用列表,以减少系统资源占用。
直接上例: