首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

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

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

使用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

热点排行