Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
@Dav1d: Und `listdir()` sortiert die Liste vorher auch, das ist also keine Lösung weil hier keine alphabetische Sortierung erwünscht ist, sondern eine nach den Zahlen in den Namen.
@thomas15: Du wirst Dir überlegen müssen wie man die Zahl aus dem Namen extrahiert und der `sort()`-Methode eine entsprechende `key`-Funktion mitgeben müssen. `sorted()` würde ich nicht nehmen denn Du hast ja schon eine Liste, die muss nicht noch einmal kopiert werden.
danke euch beiden, ich wollte mich um das string parsen druecken.
meine benutzer speichern nach beliebigen mustern:
einmal
particle_1.em particle_10.em ...
andermal
particle1.em particle10.em ...
und nochmal
p1_1.em p1_10.em p2_1.em p2_10.em
dachte wenn es schon in ls eingebaut ist, warum sollte es nicht auch in python gehen.
wenn jemand eine bessere idee hat wie man die ls -v funtionalitaet integrieren koennte dann bitte melden! (letztes beispiel kann nicht mal ls 100% handeln)
@thomas15: So schwer ist das doch nicht. Du musst halt nur die einzelnen Komponenten trennen, also Zahlen von Nicht-Zahlen und die Zahlen auch in solche umwandeln.
def key_func(string):
result = list()
for match in re.finditer(r'([\d]+)|([^\d]+)', string):
number, no_number = match.groups()
result.append(int(number) if number else no_number)
return result
@HerrHagen: Ich würde mal sagen das war nix. Sieht für mich falsch sortiert aus. Ersetz das 'p' mal durch 'versuch' wenn's Messdatensätze sind oder 'szene' wenn es Videoframes sind. Dann wird's vielleicht deutlicher.
xs = ['p1_10.em', 'p2_10.em', 'p2_1.em', 'p1_1.em', 'p1_32.em']
def get_numbers(string):
return [int(c) for c in string if c.isdigit()]
print sorted(xs, key=get_numbers)
@ahojnnes: Wieso ist falsch schöner? Alle "Nichtziffern" werden nicht berücksichtigt und 'p11_0.em' hat den gleichen Schlüssel wie 'p1_10.em' wo letzteres einen kleineren haben sollte.