Python Directory Searching And Organizing By Dict
Solution 1:
Maybe you want something like:
def explore(starting_path):
alld = {'': {}}
for dirpath, dirnames, filenames in os.walk(starting_path):
d = allddirpath= dirpath[len(starting_path):]
for subd in dirpath.split(os.sep):
based = dd= d[subd]
if dirnames:
for dn in dirnames:
d[dn] = {}
else:
based[subd] = filenames
return alld['']
For example, given a /tmp/a
such that:
$ ls -FR /tmp/a
b/ c/ d/
/tmp/a/b:
z/
/tmp/a/b/z:
/tmp/a/c:
za zu
/tmp/a/d:
print explore('/tmp/a')
emits: {'c': ['za', 'zu'], 'b': {'z': []}, 'd': []}
.
If this isn't exactly what you're after, maybe you can show us specifically what the differences are supposed to be? I suspect they can probably be easily fixed, if need be.
Solution 2:
There is a basic problem with the way you want to structure the data. If dir1/subdir1
contains subdirectories and files, should dict['dir1']['subdir1']
be a list or a dictionary? To access further subdirectories with ...['subdir2']
it needs to be a dictionary, but on the other hand dict['dir1']['subdir1']
should return a list of files.
Either you have to build the tree from custom objects that combine these two aspects in some way, or you have to change the tree structure to treat files differently.
Solution 3:
I don't know why you would want to do this. You should be able to do your processing using os.path.walk
, but in case you really need such a structure, you can do (untested):
import os
def dirfunc(fdict, dirname, fnames):
tmpdict = fdict
keys = dirname.split(os.sep)[:-1]
for k in keys:
tmpdict = tmpdict.setdefault(k, {})
for f in fnames:
ifos.path.isdir(f):
return
tmpdict[dirname] = fnames
mydict = {}
os.walk(directory_to_search, dirfunc, mydict)
Also, you should not name your variable dict
because it's a Python built-in. It is a very bad idea to rebind the name dict
to something other than Python's dict
type.
Edit: edited to fix the "double last key" error and to use os.walk
.
Post a Comment for "Python Directory Searching And Organizing By Dict"