How to sort a list of file paths

James Mills prologic at shortcircuit.net.au
Tue Dec 2 04:20:59 EST 2008


Hi Eriksson,

It's nice to see people actually contribute what they've learned back
to the community.
Great problem, well thought out solution and congrats on the learning :)

I can't say per say that I've actually run into a situation where I
need to sort file paths
in this way ... But if I do I'll be sure to use your function :)

--JamesMills

On Tue, Dec 2, 2008 at 6:36 PM, 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!
>
>
>
> 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
>
>



-- 
--
-- "Problems are solved by method"


More information about the Python-list mailing list