python 遍历目录, 有 glob, walk, listdir 等模块, 对于大多数应用场景来说, glob和walk已经非常够用了.
glob相对非常方便, walk我之前也写了一个文章(python os.walk的返回值) 介绍.
glob, walk虽然遍历方便, 但是不能够体现出 多级目录层次 的关系, 我也没想到我的应用场景绕不开 listdir 的坎. 使用while递归的方式实现了一个遍历. 供大家参考.
import os,sys
if len(sys.argv) < 1:
print('请指定目录')
_dir = sys.argv[1]
_ts = []
_sub = True
while True:
if _sub:
# 进入子目录
fs, idx, _sub = os.listdir(_dir), 0, False
elif len(_ts) > 0:
# 递归返回
_dir, idx, fs = _ts.pop()
else:
# 完成
break
for i,f in zip(range(idx, len(fs)),fs[idx:]):
if os.path.isdir(os.path.join(_dir, f)):
# 目录就保存状态,进入下一级
_ts.append([_dir, i+1, fs])
_dir, _sub = os.path.join(_dir, f), True
break
else:
# 输出文件
print(os.path.join(_dir, f))
欢迎大家留言讨论.