Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you walk through the directories using python?

Tags:

python

I have a folder called notes, naturally they will be categorized into folders, and within those folders there will also be sub-folders for sub categories. Now my problem is I have a function that walks through 3 levels of sub directories:

def obtainFiles(path):       list_of_files = {}       for element in os.listdir(path):           # if the element is an html file then..           if element[-5:] == ".html":               list_of_files[element] = path + "/" + element           else: # element is a folder therefore a category               category = os.path.join(path, element)               # go through the category dir               for element_2 in os.listdir(category):                   dir_level_2 = os.path.join(path,element + "/" + element_2)                   if element_2[-5:] == ".html":                       print "- found file: " + element_2                       # add the file to the list of files                       list_of_files[element_2] = dir_level_2                   elif os.path.isdir(element_2):                       subcategory = dir_level_2                       # go through the subcategory dir                       for element_3 in os.listdir(subcategory):                           subcategory_path = subcategory + "/" + element_3                         if subcategory_path[-5:] == ".html":                             print "- found file: " + element_3                             list_of_files[element_3] = subcategory_path                         else:                             for element_4 in os.listdir(subcategory_path):                                  print "- found file:" + element_4 

Note that this is still very much a work in progress. Its very ugly in my eyes... What I am trying to achieve here is to go through all the folders and sub folders down and put all the file names in a dictionary called "list_of_files", the name as "key", and the full path as "value". The function doesn't quite work just yet, but was wondering how would one use the os.walk function to do a similar thing?

Thanks

like image 215
chutsu Avatar asked May 27 '10 16:05

chutsu


People also ask

How do I walk a directory in Python?

To traverse the directory in Python, use the os. walk() function. The os. walk() function accepts four arguments and returns 3-tuple, including dirpath, dirnames, and filenames.

How do you access a directory in Python?

To find out which directory in python you are currently in, use the getcwd() method. Cwd is for current working directory in python. This returns the path of the current python directory as a string in Python. To get it as a bytes object, we use the method getcwdb().


2 Answers

Based on your short descriptions, something like this should work:

list_of_files = {} for (dirpath, dirnames, filenames) in os.walk(path):     for filename in filenames:         if filename.endswith('.html'):              list_of_files[filename] = os.sep.join([dirpath, filename]) 
like image 172
ig0774 Avatar answered Sep 27 '22 19:09

ig0774


an alternative is to use generator, building on @ig0774's code

import os def walk_through_files(path, file_extension='.html'):    for (dirpath, dirnames, filenames) in os.walk(path):       for filename in filenames:          if filename.endswith(file_extension):              yield os.path.join(dirpath, filename) 

and then

for fname in walk_through_files():     print(fname) 
like image 24
muon Avatar answered Sep 27 '22 20:09

muon