How to sort a list of file paths

Chris Rebert clp at rebertia.com
Tue Dec 2 04:26:26 EST 2008


On Tue, Dec 2, 2008 at 12:36 AM, Eriksson, John
<john.eriksson at logica.com> wrote:
> 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!

Sounds like the issue discussed in the post on Coding Horror:
http://www.codinghorror.com/blog/archives/001018.html
It even links to another Python version of the algorithm.

Cheers,
Chris
-- 
Follow the path of the Iguana...
http://rebertia.com

>
>
>
> 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
>
> www.logica.se
>
>
>
>
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
>


More information about the Python-list mailing list