----------------------------------------
> Subject: Re: [Tutor] tree problem
> From: evert....@gmail.com
> Date: Sun, 12 Sep 2010 13:29:12 +0200
> CC: tutor@python.org
> To: rwob...@hotmail.com
>
>> 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).
>>
>> So I change the example to this :
>>
>> def traverse(path, s='.\n', f=0, d=0):
>> path2file = os.path.join(path) *** pathfile contains the path
>> if os.path.isdir(path2file): **** if pathfile is a dir.
>> d += 1 ***** the is one more directory
>> if getdirlist(path2file): ****** if the outcome of getdirlist is the same as 
>> the current directory
>> s, f, d = traverse(path2file, '| ' + s, f, d) do this module again
>> else:
>> f += 1 ****** else f (number of files increases with 1
>> return s, f, d ****** return s , numbers of files and the number of 
>> directories.
>
> That can't be a valid program: no indentation, comments not preceded by a 
> comment mark (#), and getdirlist is nowhere defined afaics. While probably 
> anyone can understand what's the real code of the above snippet, it doesn't 
> help putting non-valid code like this in your email. If you can directly 
> copy-paste code (plain text), that is almost always better.
>
>
>> When I try to make it run I get this message :
>>
>> File "C:\Users\wobben\workspace\oefeningen\src\test.py", line 31, in traverse
>> s, f, d = traverse(path2file, '| ' + s, f, d)
>> File "C:\Users\wobben\workspace\oefeningen\src\test.py", line 31, in traverse
>> s, f, d = traverse(path2file, '| ' + s, f, d)
>> File "C:\Users\wobben\workspace\oefeningen\src\test.py", line 31, in traverse
>> s, f, d = traverse(path2file, '| ' + s, f, d)
>> File "C:\Users\wobben\workspace\oefeningen\src\test.py", line 28, in traverse
>> if os.path.isdir(path2file):
>> File "C:\Python27\lib\genericpath.py", line 44, in isdir
>> return stat.S_ISDIR(st.st_mode)
>> File "C:\Python27\lib\stat.py", line 41, in S_ISDIR
>> return S_IFMT(mode) == S_IFDIR
>> RuntimeError: maximum recursion depth exceeded
>>
>> I can't see why this happens.
>> I know I have to fish but I can't see what's wrong here.
>> So I hope someone can learn how to fish here.
>
> Fishing is debugging. You could use the logging module for that, but assuming 
> you're not familiar with that, litter your program with print statements, and 
> print out the value of the various variables at certain points in your 
> program (it helps putting a short string in the print statement as well, so 
> you know which print statement print where. Eg, print '1:', s, f, d; and then 
> a few lines below, print '2:', s, f, d).
> Having done that (you will get a lot of output), try to follow the logic of 
> the program and see why things happen the way they do. In this case, why you 
> keep spiraling in and never break out of your recursion. Then, step by step, 
> you can try and change or add statements so you actually find a way to break 
> out the recursion.
>
> Evert
>
 
Hello Evert.
 
Sorry but the change to plain text destroyed also this.
 
What I have it this.
 
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):
    dirlist = getdirlist(path)
    for file in enumerate(dirlist):
        print file
        path2file = os.path.join(path)
        if os.path.isdir(path2file):
            d += 1
            if getdirlist(path2file):
                print path2file
            myfile = open ('trash.txt', 'w')
            myfile.close () 
    return s, f, d
 
The file is made. Now find out why it doesn't go into the next level.
With this : s, f, d = traverse(path2file, '|   ' + s, f, d) I goes into a loop 
which never ends.
 
Roelof


                                          
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to