What order does info get returned in by os.listdir()

Jon Clements joncle at googlemail.com
Wed Aug 15 09:46:58 EDT 2007


To emulate the order of XP, you might be able to get away with
something like:-

    sorted( myData, key=lambda L: L.replace('~',chr(0)) )

That just forces all '~'s to be before everything else.

hth,

Jon.

On 15 Aug, 14:33, Jeremy C B Nicoll <jer... at omba.demon.co.uk> wrote:
> Marc 'BlackJack' Rintsch <bj_... at gmx.net> wrote:
>
>
>
>
>
> > On Wed, 15 Aug 2007 12:34:27 +0100, Jeremy C B Nicoll wrote:
>
> > > I've some supplementary questions... my original code was looking at
> > > each leafname in turn via
>
> > >   for leaf in os.listdir(path):
> > >       wholefile = os.path.join(path,leaf)
> > >       if os.path.isfile(wholefile):
> > >          if leaf.startswith("~"):
>
> > > etc.  But I now realise I might alternatively do something like:
>
> > >   leaflist = os.listdir(path)
> > >   <then something to sort that list>
> > >   for leaf in leaflist:
>
> > But this is doing something different that the above code!?
>
> I'm not sure if I understand you.  I know it's only "equivalent" to the
> first line of what's above, ie iterate over a list of names, and obviously
> it's got the sorting of that list done, but do you mean there's some other
> difference?
>
> > > How would I sort leaflist in a way that mimics the sort order that XP
> > > shows me things under?
>
> > This depends on what XP is.  Which program?  Which locale?  How does the
> > locale influence that programs sorting?
>
> Well... XP is Windows XP (Pro as I think I said earlier), and I'm in the UK.
> I explained earlier how XP shows me stuff in order when I tell it to sort by
> name.  
>
>
>
>
>
>
>
> > > Secondly, my code is wasting time looking at subdirectories/files which
> > > I already know I'm not interested in.  Is there a way to restrict
> > > listdir to, say, only return info about subdirectories, or only about
> > > dirs/files whose names match a pattern?
>
> > `os.listdir()` always returns all names.  You can or have to  filter the
> > result if you are only interested in some of the names.  Simple pattern
> > matching on names can be done with `glob.glob()`.
>
> > > Thirdly, once I've go a list of leafnames, somehow, is there a way to
> > > ask Python if a specific leaf-value is in that list, without explicitly
> > > looping through the items in the list?
>
> > With the ``in`` operator you have an implicit loop over the list.
>
> >   if 'readme.txt' in leafnames:
> >       print 'Hurray!'
>
> OK, that looks useful.  Thanks.
>
> --
> Jeremy C B Nicoll - my opinions are my own.- Hide quoted text -
>
> - Show quoted text -- Hide quoted text -
>
> - Show quoted text -





More information about the Python-list mailing list