[Python-de] os.walk reihenfolge

mmueller at python-academy.de mmueller at python-academy.de
Do Mär 14 13:38:11 CET 2013


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

> 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

Das ist schon die richtige Reihenfolge:

>>> sorted(['Blablabla_1', 'Blablabla_10', 'Blablabla_2'])
     ['Blablabla_1', 'Blablabla_10', 'Blablabla_2']

Du hast bestimmt schon mal diese Art der Namensgebung gesehen:

>>> sorted(['Blablabla_0001', 'Blablabla_0010', 'Blablabla_0002'])
     ['Blablabla_0001', 'Blablabla_0002', 'Blablabla_0010']

Das ist bei automatisch erzeugten Dateien üblich.

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

Unter der Annahme, dass die Datei-Namen dem Muster oben entsprechen, würde
so was funktioniern:

>>> names =  ['Blablabla_1', 'Blablabla_10', 'Blablabla_2']
>>> split = [entry.split('_') for entry in names]
>>> ordered = sorted(split, key=lambda x: int(x[1]))
>>> new_names = ['_'.join(name) for name in ordered]
>>> new_names
     ['Blablabla_1', 'Blablabla_2', 'Blablabla_10']

Geht auch in einer Zeile, wird dann aber eher unübersichtlich.

Viele Grüße
Mike

>
> Irgendwelche Ideen ?
>
>
>
>
>
>
> . . . . . . . . . . . . . . . . . . . . . . . . . .
>
> Ing. Patrick Szabo
>
> Developer
>
> LexisNexis
>
> A-1030 Wien, Marxergasse 25
>
>
>
> Patrick.Szabo at lexisnexis.at<mailto:Patrick.Szabo at lexisnexis.at>
>
> Tel.: +43 1 53452 1573
>
> Fax.: +43 1 534 52 146
>
> . . . . . . . . . . . . . . . . . . . . . . . . . .





Mehr Informationen über die Mailingliste python-de