2007-07-23

 

Python Cookbook 2.19 在给定的路径中查找特定模式的文件

需求:

给定一个搜索路径(用分隔符分割的目录列表),需要找出目录下符合特定模式的所有文件.

讨论:

基本上,需要遍历搜索路径中所有的目录,循环方法可以封装在一个生成器中:

import glob, os
def all_files(pattern, search_path, pathsep=os.pathsep):
    """ Given a search path, yield all files matching the pattern. """
    for path in search_path.split(pathsep):
        for match in glob.glob(os.path.join(path, pattern)):
            yield match

使用生成器有一个好处,你可以获得返回的第一个值,或者全部,以及其中的任何一个.比如,打印在你的PATH中满足'*.pye'的第一个文件名:

print all_files('*.pye', os.environ['PATH']).next( )

要打印全部的,而且每行一个:

for match in all_files('*.pye', os.environ['PATH']):
    print match

用列表的形式全部打出:

print list(all_files('*.pye', os.environ['PATH']))

我经常在main方法中使用all_file,来打印在PATH中的满足模式的所有文件名,它不仅能获得首先发现的,也能发现其它的:

if _ _name_ _ == '_ _main_ _':
    import sys
    if len( sys.argv) != 2 or sys.argv[1].startswith('-'):
        print 'Use: %s <pattern>' % sys.argv[0]
        sys.exit(1)
    matches = list(all_files(sys.argv[1], os.environ['PATH']))
    print '%d match:' % len(matches)
    for match in matches:
        print match

相关说明:

glob.glob(pathname)
    Return a list of paths matching a pathname pattern.

    The pattern may contain simple shell-style wildcards a la fnmatch.


Comments: 发表评论



<< Home

This page is powered by Blogger. Isn't yours?