[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