Storing of folder structure in SQL DB

Amit Khemka khemkaamit at gmail.com
Thu Apr 5 08:22:55 EDT 2007


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.



More information about the Python-list mailing list