[Python-de] os.walk reihenfolge

Szabo, Patrick (LNG-VIE) patrick.szabo at lexisnexis.at
Do Mär 14 15:25:14 CET 2013


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



. . . . . . . . . . . . . . . . . . . . . . . . . .
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