Christopher Spears wrote: > I rewrote my code with Alan's suggestions in mind. > > #!/usr/bin/python > > import os, os.path, glob > > def glob_files(pattern, base_path = '.'): > abs_base = os.path.abspath(base_path) > #path_list = [] > #path_list.append(abs_base) > globbed_dict = {} > cwd = os.getcwd() > for root,dirs,files in os.walk(abs_base): > for name in dirs: > path = os.path.join(root, name) > print path > os.chdir(path) > matched_files = glob.glob(pattern) > #print matched_files > if matched_files != []: > globbed_dict[path] = matched_files > os.chdir(abs_base) > os.chdir(cwd) > return globbed_dict > > if __name__ == "__main__": > base_path = raw_input("Enter a base path: ") > pattern = raw_input("Enter a glob pattern: ") > > str(base_path) > str(pattern) > > globbed_dict = glob_files(pattern, base_path) > > print globbed_dict > > However, the code still doesn't do exactly what I > want. > > $ ./~/chris_python 126> ./find_items_01.py > Enter a base path: ./LearningToProgram > Enter a glob pattern: *.pyc > {} > > Under the LearningToProgram directory is a test > directory that doesn't contain any .pyc files, so the > script's returned value is correct. However, .pyc > files exist in the LearningToProgram directory, and I > would like to put those files in the dictionary too. > Is there an elegant way to accomplish this?
The base_path directory will never appear in the dirs list from os.walk(). It will be returned as the root directory however. You could modify your program to glob the root directory instead of the list of dirs. Or use fnmatch.fnmatch() or fnmatch.filter(), which I still think is a better solution if you aren't married to glob(): import os, fnmatch def glob_files(pattern, base_path = '.'): abs_base = os.path.abspath(base_path) globbed_dict = {} for root,dirs,files in os.walk(abs_base): matched_files = [ os.path.join(root, name) for name in fnmatch.filter(files, pattern) ] if matched_files: # Note: no need to compare to [] globbed_dict[root] = matched_files return globbed_dict Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor