Die Funktion natsorted () kann nicht auf Listen mit Elementen in der Form pathlib.Path angewendet werden. Deshalb habe ich meine eigene Funktion zum Sortieren in natürlicher Reihenfolge erstellt.
Die Funktion sortiert () ist eine Funktion, die die Elemente einer Liste in lexikalischer Reihenfolge sortiert. Zum Beispiel, wenn es eine solche Liste gibt
strs = ["dir/10", "dir/1", "dir/3" , "dir/24"]
Wenn Sie so schreiben,
for s in sorted(strs):
print(s)
Es wird so.
dir/1
dir/10
dir/24
dir/3
Es ist in lexikalischer Reihenfolge, also vernünftig, aber für Menschen etwas unangenehm.
Andererseits ist die Funktion natsorted () eine Funktion, die die Elemente der Liste in natürlicher Reihenfolge sortiert (erfordert ein Modul). Wenn Sie so für dieselbe Liste schreiben,
from natsort import natsorted
for s in natsorted(strs):
print(s)
Es wird so.
dir/1
dir/3
dir/10
dir/24
Dieser passt gut. Die beste natsorted () Funktion!
Zum Beispiel in der folgenden Verzeichnisstruktur
dir
├ 1
├ 3
├ 10
└ 24
Auf diese Weise können Sie eine Liste im Format pathlib.Path erstellen. Wenn Sie das pathlib-Modul nachschlagen, finden Sie viele Erklärungen, daher werde ich es weglassen.
import pathlib
paths = [p for p in pathlib.Path("./dir/").iterdir() if p.is_dir()]
Wenn Sie dies dann in natürlicher Reihenfolge sortieren,
from natsort import natsorted
for p in natsorted(paths):
print(p)
Es wird so.
dir\1
dir\10
dir\24
dir\3
** Es ist in Wörterbuchreihenfolge! ** ** ** Ich bin mir sicher, dass das Pfadformat nicht unterstützt wird. Wenn Sie es also in lexikalischer Reihenfolge lesen und es ist genau das. Bedeutet das, dass das Element str oder int sein muss (da bin ich mir nicht sicher, ich suche nach Informationen).
Ich habe eine solche Funktion selbst gemacht. Die Funktion sortiert () verwendet die Tatsache, dass der Schlüssel als Argument angegeben werden kann.
def paths_sorted(paths):
return sorted(paths, key = lambda x: int(x.name))
Wenn Sie dies so verwenden,
for p in paths_sorted(paths):
print(p)
Es wird so.
dir\1
dir\3
dir\10
dir\24
Das gewünschte Ergebnis wurde erhalten.
In meinem Fall war der Verzeichnisname ein numerischer Wert, daher habe ich den Verzeichnisnamen in int konvertiert und als Schlüssel verwendet. Wenn Sie eine Zeichenfolge wie no1, no2 ... einfügen möchten, können Sie natsorted () als str verwenden (obwohl Sie ein Modul benötigen). Die gleiche Methode sollte für Dateien anstelle von Verzeichnissen gelten.
Recommended Posts