How to sort a list of file paths

Eriksson, John john.eriksson at logica.com
Tue Dec 2 09:36:02 CET 2008


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: john.eriksson at logica.com<mailto:john.eriksson at logica.com>
www.logica.se<http://www.logica.se>


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20081202/9a456033/attachment.html>


More information about the Python-list mailing list