DesperateLearner
DesperateLearner

Reputation: 1175

Searching a directory for folders and files using python

I have a directory structure like the one given below.

         MainFolder 
             |
           [lib] 
         /   |   \
       [A]  [B]  [C] -- file1.so 
        |     |         file2.so
   file1.so   file1.so
   file2.so   file2.so    

I'm trying to look for the 'lib' folder in that structure which might not be there at times. So I'm using the following to check for the presence of the 'lib' folder:

   if os.path.isdir(apkLocation + apkFolder + '/lib/'):

If lib folder exists, then I carry on to search the folders inside 'lib'. I have to store the names of the folder A,B and C and look for the files ending with '.so' whose path should be stored as /lib/A/file1.so,/lib/A/file2.so and so on.

 if os.path.isdir(apkLocation + apkFolder + '/lib/'):
   for root, dirs, files in os.walk(apkLocation + apkFolder):
            for name in files:
                if name.endswith(("lib", ".so")):
                    print os.path.abspath(name) 

This gives me an out

                  file1.so
                  file2.so
                  file1.so
                  file2.so
                  file1.so
                  file2.so

Desired output:

           /lib/A/file1.so
           /lib/A/file2.so
           /lib/B/file1.so
           /lib/B/file2.so
           /lib/C/file1.so
           /lib/C/file2.so

and also the folders A,B and C are to be saved separately.

Upvotes: 7

Views: 45018

Answers (2)

Mehrdad Kazerooni
Mehrdad Kazerooni

Reputation: 11

You need to join at first the current directory and the filename to get the whole path to the file: for root, dirs, files in os.walk(apkLocation + apkFolder): for name in files: if name.endswith(("lib", ".so")): os.path.join(root, name)

Upvotes: 0

Christian Heimes
Christian Heimes

Reputation: 1415

You have to join the current directory and the name to get the absolute path to a file:

for root, dirs, files in os.walk(apkLocation + apkFolder):
    for name in files:
        if name.endswith(("lib", ".so")):
            os.path.join(root, name)

It's documented here http://docs.python.org/3/library/os.html#os.walk, too.

Upvotes: 16

Related Questions