[Tutor] Pythonic? Building a full path from a "visual" file tree

Kent Johnson kent37 at tds.net
Tue Mar 21 19:11:35 CET 2006


stv wrote:
> I considered several brute-force solutions, but I persevered and came
> to, what I think, is a more Pythonic solution. What do you think?

Looks pretty sweet to me :-)
> 
> import string
> 
> def expand_tree(filetree):
>   indent = '\t'
>   stack = []
>   for f in filetree:
>     indents = f.count(indent)
>     while len(stack) > indents: stack.pop()
>     stack.append(f.strip())
>     yield string.join(stack,'')
>     if not f.endswith('/'): stack.pop()
> 
> lines = [line.rstrip() for line in file('test.txt')]	
> for i in expand_tree(lines): print i
> 
> Questions:
> 
> Is the list comprehension the right idiom for getting a file into a
> list, without the EOL chars? I'm hard-pressed to see how it could be
> more concise, but this is Python :) and the rtrim() feels a little
> off.

The list comp is fine but I don't think you need it at all, since you 
strip() the string before you add it to stack.
> 
> Is string.join() preferred to ''.join? Does importing all of string
> outweigh the readability of string.join()?

string.join() is deprecated, ''.join() is preferred.

Kent



More information about the Tutor mailing list