[Python-de] os.walk reihenfolge

mmueller at python-academy.de mmueller at python-academy.de
Do Mär 14 15:29:23 CET 2013


Zitat von "Szabo, Patrick (LNG-VIE)" <patrick.szabo at lexisnexis.at>:

> Vielen Dank für die Mühe, aber die Filenamen sind leider sehr sehr  
> unterschiedlich.

Wie wäre es mal mit einem Beispiel mit konkreten Dateinamen und
Soll/Ist-Sortierung?

Mike

>
>
>
> . . . . . . . . . . . . . . . . . . . . . . . . . .
> Ing. Patrick Szabo
> Developer
> LexisNexis
> A-1030 Wien, Marxergasse 25
>
> mailto:Patrick.Szabo at lexisnexis.at
> Tel.: +43 1 53452 1573
> Fax.: +43 1 534 52 146
>
> . . . . . . . . . . . . . . . . . . . . . . . . . .
>
> -----Ursprüngliche Nachricht-----
> Von: python-de  
> [mailto:python-de-bounces+patrick.szabo=lexisnexis.at at python.org] Im  
> Auftrag von mmueller at python-academy.de
> Gesendet: Donnerstag, 14. März 2013 15:23
> An: python-de at python.org
> Betreff: Re: [Python-de] os.walk reihenfolge
>
>
> Zitat von Peter Otten <__peter__ at web.de>:
>
>> Szabo, Patrick (LNG-VIE) wrote:
>>
>>> Hi,
>>>
>>> Ich verwende Python 3.2 und walke durch eine Ordnerstruktur.
>>> Nun ordnet er mir die files aber leider nicht so wie ich das gerne
>>> hätte, nämlich so wie Windows es auch tut. Ich krieg die files so  
>>> (Beispiel):
>>>
>>> Blablabla_1
>>> Blablabla_10
>>> Blablabla_2
>>> Blablabla_3
>>> Blablabla_4
>>> Blablabla_5
>>> Blablabla_6
>>> Blablabla_7
>>> Blablabla_8
>>> Blablabla_7
>>>
>>> Ich will das ganze natürlich in der richtigen Reihenfolge also
>>> Blablabla_1 bis Blablabla_10. Ich versuche gerade das im Nachhinein
>>> zu sortieren, aber da geht iwie auch nix weiter.
>>>
>>> Irgendwelche Ideen ?
>>
>> Du kannst den Namen in einen Text- und einen numerischen Teil zerlegen
>> und das als key für sorted() oder list.sort() verwenden. Hier eine
>> Variante, die mit mehreren numerischen Bestandteilen klarkommt:
>>
>>>>> import re
>>>>> names = """Blablabla_1
>> ... Blablabla_10
>> ... Blablabla_2
>> ... Blablabla_3
>> ... Blablabla_4
>> ... Blablabla_5
>> ... Blablabla_6
>> ... Blablabla_7
>> ... Blablabla_8
>> ... Blablabla_7""".splitlines()
>>>>> def sortkey(s):
>> ...     parts = re.split("(\d+)", s)
>> ...     parts[1::2] = map(int, parts[1::2])
>> ...     return parts
>
> Schöne Lösung und viel allgemeiner als mein Schnellschuss.
>
> Mike
>
>>>>> sorted_names = sorted(names, key=sortkey) print
>>>>> "\n".join(sorted_names)
>> Blablabla_1
>> Blablabla_2
>> Blablabla_3
>> Blablabla_4
>> Blablabla_5
>> Blablabla_6
>> Blablabla_7
>> Blablabla_7
>> Blablabla_8
>> Blablabla_10
>>
>>
>>>>> sorted("""alpha_10_2
>> ... alpha_1_10
>> ... alpha_10_1
>> ... alpha_1_3""".splitlines(), key=sortkey) ['alpha_1_3',
>> 'alpha_1_10', 'alpha_10_1', 'alpha_10_2']
>
>
>
> _______________________________________________
> python-de maillist  -  python-de at python.org  
> http://mail.python.org/mailman/listinfo/python-de





Mehr Informationen über die Mailingliste python-de