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.
给定一个搜索路径(用分隔符分割的目录列表),需要找出目录下符合特定模式的所有文件.
讨论:
基本上,需要遍历搜索路径中所有的目录,循环方法可以封装在一个生成器中:
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.