Recipe 2.18. Finding a File Given a Search PathCredit: Chui Tey ProblemGiven a search path (a string of directories with a separator in between), you need to find the first file along the path with the requested name. SolutionBasically, you need to loop over the directories in the given search path: import os def search_file(filename, search_path, pathsep=os.pathsep): """ Given a search path, find file with requested name """ 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" DiscussionThis recipe's "Problem" is a reasonably frequent task, and Python makes resolving it extremely easy. Other recipes perform similar and related tasks: to find files specifically on Python's own search path, see Recipe 2.20; to find all files matching a pattern along a search path, see Recipe 2.19. The search loop can be coded in many ways, but returning the path (made into an absolute path, for uniformity and convenience) 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 returned by Python when a function falls off the end. Having the return statement explicitly there in this case makes the functionality of search_file much clearer at first sight. See AlsoRecipe 2.20; Recipe 2.19; documentation for the module os in the Library Reference and Python in a Nutshell. |