Recipe 2.18. Finding a File Given a Search Path
Credit: Chui Tey
Problem
Given 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.
Solution
Basically, 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"
Discussion
This 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 Also
Recipe 2.20; Recipe 2.19; documentation for the
module os in the Library
Reference and Python in a
Nutshell. |