>>>>> "Mike" == Mike Zupan <mz****@meso.com> writes:
Mike> I have a list that includes files and directories ie: list =
Mike> ['file', 'file2', 'dir1','file3','dir2' ]
Mike> I want to sort it so it looks like this
Mike> ['dir1', 'dir2', 'file1','file2','file3' ]
Mike> I'm just wondering if there is an easy way to do this
This is a good example of when you should use the decorate, sort,
undecorate (DSU) pattern. When python sorts tuples, it compares first
on the first element of the tuple and then on the next element, and
then so on. If you create tuples where the first element of dirs
compares less than the first element of files, and the second element
is just the dir/file name, then you'll get the sort you want. All you
have have to do is undecorate, ie, remove the unwanted information
from the tuples. Here is the approach
import os
fnames = ('emacs', '.emacs', 'tex','.tcshrc','diary' )
tmp = [ (not os.path.isdir(fname), fname) for fname in fnames] # decorate
tmp.sort() # sort
fnamesSorted = [fname for isdir, fname in tmp] # undecorate
For more info on DSU, see
http://groups.google.com/groups?num=...=Google+Search
and the Python Cookbook, which has a chapter on sorting mainly devoted
to DSU.
Mike> list = ['file', 'file2', 'dir1','file3','dir2' ]
You may want to avoid the name list because it is a built-in. For
example, to convert a string to a list of characters, you would do
seq = list('John Hunter')
After creating a variable named list, you can no longer do this.
Cheers,
John Hunter