problem with recursion

vegetax vegeta.z at gmail.com
Thu Mar 3 17:05:37 EST 2005


Alexander Zatvornitskiy wrote:

> ?????? vegetax!
> 
> 03 ????? 2005 ? 13:54, vegetax ? ????? ?????? ? All ?????:
> 
>  v> I need this in order to print a directory tree with htmlgen library
>  v> which uses nested lists to represent trees.
> As you see from output of your code, you simply add items to the only
> list. Try this:
>  v> def rec(f):
>         res=[]
>  v>     print f
>  v>     for ele in listdir(f):
>  v>       ele=join(f,ele)
>  v>       if isdir(ele):
>  v>           # append the directory name
>  v>           res.append(basename(ele))
>               res+=[ rec(ele) ]
>  v>       else:
>  v>     res.append(basename(ele))
>         return res
> 
> print rec(dirpath)
> 
> 
> 
> Alexander, zatv at bk.ru

Thanks it works!

Kent Johnson wrote:

>The problem is that you are always appending individual names to the same
>list. If you make rec() 
>return a list and append that to the current list you get what you want:

>#!/usr/bin/python
>from os import listdir
>from os.path import isdir,join,basename

>dirpath  = '/tmp/test/'

>def rec(f):
>     res = []
>     for ele in listdir(f):
>        res.append(ele)
>        ele = join(f,ele)
>        if isdir(ele):
>            res.append(rec(ele))
>    return res
>
>print rec(dirpath)

Thanks that works too!

I realy have to improve my recursion skills =(
Anyway having the directory :

+root 
  +doc1
    lesson1
    lesson2
    +doc3
      lesson3 
  +doc2
    lesson4
    lesson5

With the code : 

<code>
#!/usr/bin/python
from os import listdir
from os.path import isdir,join,basename
import HTMLgen

dirpath = '/devel/python/html/test'

def rec(f):
    res = []
    for ele in listdir(f):
        res.append(ele)
        ele = join(f,ele)
        if isdir(ele):
            res.append(rec(ele))
    return res

print HTMLgen.List(rec(dirpath))
</code>
  
Gives me the espected output as a HTML representation of the tree:

<UL>
<LI>doc1
    <UL>
    <LI>lesson1.html
    <LI>lesson2.html
    <LI>doc3
        <UL>
        <LI>lesson3.html
        </UL>
    </UL>
<LI>doc2
    <UL>
    <LI>lesson5.html
    <LI>lesson4.html
    </UL>
<LI>.tmp3.py.swp

</UL>




More information about the Python-list mailing list