读书人

使用glob与yield递归索引文件,结果不对

发布时间: 2013-10-16 11:29:46 作者: rapoo

使用glob与yield递归目录文件,结果不对
我想使用glob与yield递归目录下所有文件,结果不正确.
代码:


def browse_files(path):
for f in glob.glob(path + os.sep + "*"):
if os.path.isdir(f):
browse_files(f)
else:
yield f #此处使用yield返回文件名

path = r'E:\WIFI\MAC\1100old'
for filename in browse_files(path):
print filename


得到的结果(错误)是:
E:\WIFI\MAC\1100old\00_19_3B_82_3A_6B.lic
E:\WIFI\MAC\1100old\00_19_3B_82_3A_6D.lic
E:\WIFI\MAC\1100old\old.tar.gz

我把yield f 改成 print f
执行browse_files(path),得到结果(正确):
E:\WIFI\MAC\1100old\00_19_3B_82_3A_6B.lic
E:\WIFI\MAC\1100old\00_19_3B_82_3A_6D.lic
E:\WIFI\MAC\1100old\old\00_19_3B_81_DB_38.lic
E:\WIFI\MAC\1100old\old\00_19_3B_81_DB_3A.lic
E:\WIFI\MAC\1100old\old\00_19_3B_82_3A_6B.lic
E:\WIFI\MAC\1100old\old\00_19_3B_82_3A_6D.lic
E:\WIFI\MAC\1100old\old.tar.gz

请问错误在哪里,求指点?


[解决办法]
return browse_files(f)

干嘛不用 walk() ?
[解决办法]
if os.path.isdir(f):
for f browse_files(f):
yield f

好像看到最近的3.x版本有新语法,末2句可简化成 yield from browse_files(f)
[解决办法]
http://stackoverflow.com/questions/6755869/yield-in-a-recursive-function

读书人网 >perl python

热点推荐