[Tutor] tree problem

Roelof Wobben rwobben at hotmail.com
Sun Sep 12 16:48:07 CEST 2010




________________________________
> Date: Sun, 12 Sep 2010 09:46:08 -0400
> From: joel.goldstick at gmail.com
> To: tutor at python.org
> Subject: Re: [Tutor] tree problem
>
>
>
> On Sun, Sep 12, 2010 at 9:32 AM, Roelof Wobben
>> wrote:
>
>
> ________________________________
>> Date: Sun, 12 Sep 2010 09:08:18 -0400
>> From: joel.goldstick at gmail.com
>> To: tutor at python.org
>
>> Subject: Re: [Tutor] tree problem
>>
>>
>>
>> On Sun, Sep 12, 2010 at 7:54 AM, Lie Ryan
>>> wrote:
>> On 09/12/10 21:15, Roelof Wobben wrote:
>>>
>>>
>>> Hello,
>>>
>>> I have this problem.
>>>
>>> Write a program named litter.py that creates an empty file named
>> trash.txt in each subdirectory of a directory tree given the root of
>> the tree as an argument (or the current directory as a default).
>>
>> By default, Python has a recursion limit of 1000 deep; that is, your
>> function is calling itself 1000 times without returning.
>>
>> In this case, the only reason why you hit the recursion limit is if you
>> have a directory which is 1000 deep (quite unlikely, Windows has a
>> directory depth limit much lower than that).
>>
>> Or your function somehow never returns, in a typical recursive function,
>> it's usually because you have problem in the precondition.
>>
>> You really have two problems here:
>>
>> 1. You need to know how to write an empty file with the name
>> litter.py. You should probably write a function to see if you can do
>> that. That's pretty easy
>>
>> 2. You need to traverse a tree. I see you are using os module. You
>> should try help(os) while in your python shell to learn what methods
>> are available. Traversing a tree is also sometimes called 'walking'
>>
>> good luck
>>
>>
>> --
>> Joel Goldstick
>>
>>
>> _______________________________________________ Tutor maillist -
>
>> Tutor at python.org To unsubscribe or change
> subscription options:
>> http://mail.python.org/mailman/listinfo/tutor
>
> Hello Joel.
>
> Youre right.
> Problem 1 is easily solved by using myfile = open ('filename', 'w')
> followed by myfile.close()
>
> Problem 2 is more difficult.
>
> I have to use recursion and as example the source of the tree command
> in linux is given.
> The traverse module looks like this :
>
> def traverse(path, prefix='|--', s='.\n', f=0, d=0):
>
> what's up with the prefix???
>
> dirlist = getdirlist(path)
> for num, file in enumerate(dirlist):
>
> why are you using enumerate? it gives you num which you never use
> for file in dirlist gives what you seem to be using
> lastprefix = prefix[:-3] + '``--'
> dirsize = len(dirlist)
> if num < dirsize - 1:
> s += '%s %s\n' % (prefix, file)
> else:
> s += '%s %s\n' % (lastprefix, file)
> path2file = os.path.join(path, file)
>
> if os.path.isdir(path2file):
> d += 1
> if getdirlist(path2file):
> s, f, d = traverse(path2file, '| ' + prefix, s, f, d)
> else:
> f += 1
> return s, f, d
>
> For me it looks like the pathfile = os.path.join(path, file)
> and then the s.f.d. rule take care that a subdir is entered.
> what are s.f.d. Can you use more descriptive names
>
> Am I right on this ?
>
> Roelof
>
>
>
>
>
> --
> Joel Goldstick
>
>
> _______________________________________________ Tutor maillist -
> Tutor at python.org To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
 
Hello, 
 
I solved this by this programm :
 
import os
import sys

def getroot():
    if len(sys.argv) == 1:
        path = ''
    else:
        path = sys.argv[1]
    if os.path.isabs(path):
        tree_root = path
    else:
        tree_root = os.path.join(os.getcwd(), path)
    return tree_root

def getdirlist(path):
    dirlist = os.listdir(path)
    dirlist = [name for name in dirlist if name[0] != '.']
    dirlist.sort()
    return dirlist

def traverse(path, s='.\n', f=0, d=0):
    file = os.path.join(path,'trash.txt')
    myfile = open (file, 'w')
    myfile.close()
    dirlist = getdirlist(path)
    for num, file in enumerate(dirlist):
        dirsize = len(dirlist)
        if num < dirsize - 1:
            s += '%s \n' % (file)
        else:
            s += '%s \n' % (file)
        path2file = os.path.join(path, file)
        if os.path.isdir(path2file):
            d += 1
            s, f, d = traverse(path2file, '|   ' + s, f, d)
    return s,f,d

if __name__ == '__main__':
    root =  getroot()
    tree_str, files, dirs = traverse(root)

 
Roelof

  		 	   		  


More information about the Tutor mailing list