Hi,
I noticed that when I use os.listdir I need to work with absolute paths
90% of times.
While I can use a for cycle, I'd prefere to use a list comprehension,
but it becomes too long.
I propose to add an 'abs' keyword which would make os.listdir return the
absolute path of files instead of a relative path.
This would bring only advantages, I think.
I show two examples
from os import listdir
from os.path import isdir,join,gets ize,isfile
### e.g. 1 part 1 - getting a list of directories ###
dirs=[]
for i in os.listdir(path ):
tmp_path=os.pat h.join(path,i)
if os.path.isdir(t mp_path):
dirs.append(tmp _path)
### e.g. 1 part 2 ###
dirs=[join(path,x) for x in listdir(path) if isdir(join(path ,x))]
here the list comprehension is still clear, but only because we have
direct references to join and friends. moreover whe need to use join twice
for each directory.
### e.g. 2 part 1 - getting a list of (file,size) tuples ###
path_size=[]
for i in os.listdir(path ):
tmp_path=os.pat h.join(path,i)
if os.path.isfile( tmp_path):
path_size.appen d((tmp_path,get size(tmp_path))
### e.g. 2 part 2 ###
dirs=[(join(path,x),g etsize(join(pat h,x)) for x in listdir(path) if
isfile(join(pat h,x))]
now list comprehension is way too long, and in the worst case we must use
join 3 times for each iteration.
adding an 'abs' keyword to os.listdir would give benefits both to for
cycle and list comprehensions.
for cycle would lose the tmp_path assignment and list comprehensions ...
### e.g. 1 part 2 bis ###
dirs=[x for x in listdir(path,ab s=True) if isdir(x)]
here we gain clearness and speed.
### e.g. 2 part 2 bis ###
dirs=[(x,getsize(x)) for x in listdir(path,ab s=True) if isfile(x)]
and here we gain clearness, speed and a truely _usable_ list comprehension
What do you think about this ?
Thanks for reading,
Riccardo
--
Riccardo Galli
Sideralis Programs
http://www.sideralis.net