任务
给定一个搜索路径(一个描述目录信息的字符串),需要根据这个路径和请求的文件名找到第一个符合要求的文件。
解决方案
需要循环指定的搜索路径中的目录:
import os
def search_file(filename,search path,pathsep=os.pathsep):
"""给定一个搜索路径,根据请求的名字找到文件"""
for path in search_path.split(pathsep):
candidate = os.path.join(path,filename)
if os.path.isfile(candidate):
return os.path.abspath(candidate)
return None
if __name__ == '__main__':
search_path = '/bin' + os.pathsep + '/usr/bin'#;on Windows,:on UNIX
find_file = search_file('ls',search_path)
if find_file:
print "File 'ls' found at %s" % find_file
else:
print "File 'ls' not found"
讨论
本节的任务是个很常见的需求,Python 对这个需求的解决办法也极其简单。本章其他一些节也会处理相似或相关的一些任务:见第2.20节,在Python自身的搜索路径中找文件,以及第 2.19节,在指定的搜索路径中根据匹配模式寻找文件。进行搜索的循环可以被写成很多形式,但一旦找到就立刻返回路径(这里用绝对路径主要基于统一性和方便性的考虑)是最简单的,而且速度很快。在循环完成之后显式地return None并不是必须的,因为在Python中一个函数执行完毕后会自行返回None。在这里画蛇添足的加一句retun语句,仅仅是为了让人能够一目了然地看清search_file的所做的事情。