请教:怎样列出指定目录下的所有文件,包括子目录下的文件,谢谢

请教:怎样列出指定目录下的所有文件,包括子目录下的文件,谢谢

就找到一个listdir函数,但不能得到子目录下的文件。试着递归了一下,没搞定。

谢谢


filenamelist=[]

def listfile(path):
    name = ""
    temppath = path
    filelist = os.listdir(temppath)

    while(len(filelist)>;0):
        name = filelist.pop()
        subpath = temppath + "\\" +name
        sublist = os.listdir(subpath)
   
        if(len(sublist) <= 0):
            filenamelist.push(subpath)
        else:
            listfile(subpath)

listfile(filedir)
walk( path, visit, arg)
具体看文档吧


[Copy to clipboard] [ - ]
CODE:
find.py

import fnmatch, os

def find(pattern, startdir=os.curdir):
    matches = []
    os.path.walk(startdir, findvisitor, (matches, pattern))
    matches.sort()
    return matches

def findvisitor((matches, pattern), thisdir, nameshere):
    for name in nameshere:
        if fnmatch.fnmatch(name, pattern):
            fullpath = os.path.join(thisdir, name)
            matches.append(fullpath)

if __name__ == '__main__':
    import sys
    namepattern, startdir = sys.argv[1], sys.argv[2]
    for name in find(namepattern, startdir): print name



[Copy to clipboard] [ - ]
CODE:
>;>;>; import find
>;>;>; list = find.find('*.py','/home/jetrix')
>;>;>; for fname in list:
.......      print fname

谢谢二位

看了半天walk函数的帮助,已经OK了,今天闲着共享出来。

filedir = "d:\\xxx"

filenamelist=[]

def visit(arg, dirname, names, flist = filenamelist):
    flist += [dirname + "\\" + file for file in names]
        
os.path.walk(filedir, visit, 0)

walk函数对每一个文件夹调用visit函数,并传递dirname, names参数,names包括dirname下的所有的文件名列表(用listdir函数获得)。

我需要将结果保存到filenamelist中,filenamelist由一个默认参数传递给visit,不影响walk调用。

filenamelist中得到所有的文件名列表,我的需求不用判断是文件还是文件夹。
SyntaxError: invalid syntax
>;>;>; filedir = "d:\\Safer Toll"
>;>;>; filenamelist=[]
>;>;>; def visit(arg, dirname, names, flist = filenamelist);
  File "<stdin>;", line 1
    def visit(arg, dirname, names, flist = filenamelist);
                                                        ^
SyntaxError: invalid syntax

怎么回事呢?


QUOTE:
原帖由 "safer" 发表:
gt;>; def visit(arg, dirname, names, flist = filenamelist);
  File "<stdin>;", line 1
    def visit(arg, dirname, names, flist = filenamelist);
                                              ..........

把;改成:
os.walk版find

[Copy to clipboard] [ - ]
CODE:
def find2(pattern, startdir=os.curdir):
        matches = []
        for (thisdir, subdirs,fileshere) in os.walk(startdir):
                for filename in fileshere:
                        if fnmatch.fnmatch(filename, pattern):
                                fullpatch = os.path.join(thisdir, filename)
                                matches.append(fullpatch)
        return matches



QUOTE:
原帖由 jetrix 于 2005-7-8 16:52 发表

find.py

import fnmatch, os

def find(pattern, startdir=os.curdir):
    matches = []
    os.path.walk(startdir, findvisitor, (matches, pattern))
    matches.sort()
    return matches

...