Hi,

This weekend I had some problems to get a list containing file paths to be 
sorted in a way that I could use.

I also found a thread in this mailing list ( 
http://mail.python.org/pipermail/python-list/2007-April/433590.html ) and 
realized that others might be interested in a solution.

So... here is my five cents regarding file path sorting:

Problem description:

You have a list containing some file names:

>>> file_list = ["File2.txt","File1.txt","File10.txt"]

If you sort this list in the conventional way you end up with a result like:

>>> file_list.sort()
>>> print file_list
['File1.txt','File10.txt','File2.txt']

Solution:

Sort the list by splitting alphas and digits in to groups and compare them 
separately.

import re
def true_alphanum_cmp(a,b):
    aa = re.findall(r'\d |\D ', a)
    bb = re.findall(r'\d |\D ', b)
    for i in range(min(len(aa),len(bb))):
        if aa[i].isdigit() and bb[i].isdigit():
            c = cmp(int(aa[i]),int(bb[i]))
        else:
            c = cmp(aa[i],bb[i])
        if c!=0:
            return c
    return cmp(len(aa),len(bb))

file_list = ["File2.txt","File1.txt","File10.txt"]
file_list.sort(true_alphanum_cmp)

If the formatting in this mail is messed up you can find the example at 
http://arainyday.se/notebook/true_alphanum_cmp.php

All comments and improvements are welcome!

Best regards
John Eriksson
_________________________________________

Logica - Releasing your potential
Tegsplan 2b
904 20 UMEƅ
Sweden

T: +46 (0) 90 15 91 38
M: +46 (0) 70 366 16 77
E: [EMAIL PROTECTED]<mailto:[EMAIL PROTECTED]>
www.logica.se<http://www.logica.se>


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to