Credit: Chui Tey
Given a search path (a string of directories with a separator in between), you need to find the first file along the path whose name is as requested.
Basically, you need to loop over the directories in the given search path:
import os, string def search_file(filename, search_path, pathsep=os.pathsep): """ Given a search path, find file with requested name """ for path in string.split(search_path, pathsep): candidate = os.path.join(path, filename) if os.path.exists(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 found at %s" % find_file else: print "File not found"
This is a reasonably frequent task, and Python makes it extremely
easy. The search loop can be coded in many ways, but returning the
normalized path as soon as a hit is found is simplest as well as
fast. The explicit return None
after the loop is
not strictly needed, since None
is what Python
returns when a function falls off the end, but having the return
explicit in this case makes the functionality of
search_file
much clearer at first sight.
To find files specifically on Python’s own search path, see Recipe 4.22.
Recipe 4.22; documentation for the module
os
in the Library Reference.