Storing of folder structure in SQL DB

Sergei Minayev sergei.minayev at gmail.com
Fri Apr 6 06:12:51 EDT 2007


Amit Khemka:
> On 5 Apr 2007 04:58:22 -0700, Sergei Minayev <sergei.minayev at gmail.com> wrote:
> > Hi All!
> > Can you please help me with the following problem:
> > I need to store a copy of local folders structure in MySQL database.
> > I have chosen the following table structure for that:
> > ------------------------------------------------
> > |  id  |  id_uplink  |  folder_name  |
> > ------------------------------------------------
> > id - unique property of each folder.
> > id_uplink - id of upper level folder is stored here (for example: if
> > id of c:\test is 1, than id_uplink of c:\test\python equals 1).
> > folder_name - name of folder.
> > You see, i dont want to store the path list, but the structure.
> >
> > The question is how to implement that in Python. I easily made it in C+
> > + using recursion. But, unfortunately, I can't figure it out how to
> > make it in python using os.walk function (or can you recommend smth.
> > else???). :( Though it looks quite simple, but anyway.
> >
> > Best Regards,
>
> os.walk should be more than sufficient in your case. You can navigate
> the directory structure and at each 'new' directory find its parents
> id and assign a new-id to this 'new' directory.
>
> An Example:
>
> import os
> root='/my/root/directory'
> id =0
> tree={root:(-1, id)}
> id+=1
> for path, dirs, files in os.walk(root):
>         for dir in dirs:
>                 if not tree.has_key(path+'/'+dir):
>                         tree[path+'/'+dir]=(tree[path][1], id)
>                         id+=1
>
> It stores ids as a tuple (parent_id, id) in a dictionary(tree). Should
> be straight forward to modify to your requirements. Also you can make
> the following code more efficient by saving/caching some lookups !
>
> Cheers,
> --
> ----
> Amit Khemka -- onyomo.com
> Home Page: www.cse.iitd.ernet.in/~csd00377
> Endless the world's turn, endless the sun's Spinning, Endless the quest;
> I turn again, back to my own beginning, And here, find rest.

Thanks! Your code example was really helpful!




More information about the Python-list mailing list