[Tutor] tree problem
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
>> 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
>> On 09/12/10 21:15, Roelof Wobben wrote:
>>> 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:
> 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)
> 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)
> 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 ?
> Joel Goldstick
> _______________________________________________ Tutor maillist -
> Tutor at python.org To unsubscribe or change subscription options:
I solved this by this programm :
if len(sys.argv) == 1:
path = ''
path = sys.argv
tree_root = path
tree_root = os.path.join(os.getcwd(), path)
dirlist = os.listdir(path)
dirlist = [name for name in dirlist if name != '.']
def traverse(path, s='.\n', f=0, d=0):
file = os.path.join(path,'trash.txt')
myfile = open (file, 'w')
dirlist = getdirlist(path)
for num, file in enumerate(dirlist):
dirsize = len(dirlist)
if num < dirsize - 1:
s += '%s \n' % (file)
s += '%s \n' % (file)
path2file = os.path.join(path, file)
d += 1
s, f, d = traverse(path2file, '| ' + s, f, d)
if __name__ == '__main__':
root = getroot()
tree_str, files, dirs = traverse(root)
More information about the Tutor