不求效率,只求简短,列出绝对路径所有子目录下.jar文件

不求效率,只求简短,列出绝对路径所有子目录下.jar文件



[Copy to clipboard] [ - ]
CODE:
ljars=[]
def makeClassPath(dir):
    os.path.walk(dir, jarsList, ())
    path = ljars[0]
    for jar in ljars[1:]:
        path += (':' + jar)
    return path

def jarsList(arg, dirname, names):
    for name in names:
        file = os.path.join(dirname, name)
        if (file.endswith('.jar')):
            ljars.append(file)

随便写一个,这里还用到全局变量,而且程序不短,起码用了两个函数,有什么更精简的代码吗?最后是要把这些.jar文件的完整路径用:连接起来,类型于UNIX中的PATH变量表达方式。
>>> import glob
>>> glob.glob("*.jar")

详细代码:
>>> import glob, os
>>> os.chdir("e:") # 目录
>>> jars=glob.glob("*.jar")
>>> print ":".join(jars)



QUOTE:
原帖由 xiaoyu9805119 于 2008-8-4 11:48 发表
>>> import glob
>>> glob.glob("*.jar")

详细代码:
>>> import glob, os
>>> os.chdir("e:") # 目录
>>> jars=glob.glob("*.jar")
>>> print ":".join(jars)



QUOTE:
列出绝对路径所有子目录

glob是列当前目录
>>> os.chdir("e:") # 目录
这一行不是加了chdir了么??


[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python                                                           

from os import path, chdir
from glob import glob

def f(x,y,z):
    chdir(y)
    x[0]+=reduce(lambda p,q: p+":"+path.join(y,q), [""]+glob("*.py"))


x=[""]
path.walk("/home/retuor/test/cu", f, x)
print x[0]

x[0] 前面多了个 ":",切一切就好。



QUOTE:
原帖由 xiaoyu9805119 于 2008-8-4 12:44 发表
>>> os.chdir("e:") # 目录
这一行不是加了chdir了么??

你这不是只取E:下面的文件么?没有包括子目录或者子目录的子目录下的文件吧?


[Copy to clipboard] [ - ]
CODE:
def getfiles(path):
    for root, dirs, names in os.walk(path):
        for name in names:
            yield os.path.join(root, name)
            
print ':'.join([x for x in getfiles('c:\\') if x.endswith('.jar')])

不好意思。呵呵,没有看清楚哦。

楼上的不错。只是看到yield 就令人想到ruby。。。。。
赞一个。


[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python

from os import path

def f(x,y,z):
    z=filter(lambda x:x.endswith('.py'), z)
    x+=map(lambda x:path.join (y, x), z)

x=[]   
path.walk("/home/retour/test/cu", f, x)
print reduce (lambda p,q: p+':'+q, x)

再改一下:

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python                                                           

from os import path

def f(x,y,z):
    x.extend([y+i for i in z if i.endswith('.py')])

x=[]
path.walk("/home/retuor/test/cu", f, x)
print ':'.join(x)