[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge

Überblick

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.

sortierte () und natsorted () Funktionen

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!

Was passiert, wenn Path ein Element ist?

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

Lösung

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.

Andere

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

[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Kopieren Sie die Liste in Python
[Python] Ruft die Liste der im Modul definierten Klassen ab
[Python] Gibt alle Kombinationen von Elementen in der Liste aus
Informationen zur Grundlagenliste der Python-Grundlagen
In Python werden die Elemente in der Liste sortiert und als Elemente und Vielfache ausgegeben.
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Bubble Sort)
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Selective Sort)
Sortieren Sie die Liste der Tupel in Python, indem Sie die aufsteigende / absteigende Reihenfolge mehrerer Schlüssel angeben
Überprüfen Sie das Verhalten des Zerstörers in Python
Zeigen Sie eine Liste der Alphabete in Python 3 an
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
Das Ergebnis der Installation von Python auf Anaconda
Grundlagen zum Ausführen von NoxPlayer in Python
Zusammenfassung der integrierten Methoden usw. der Python-Liste
Auf der Suche nach dem schnellsten FizzBuzz in Python
Ruft die EDINET-Codeliste in Python ab
[Python] Ermittelt den Rang der Werte in der Liste in aufsteigender / absteigender Reihenfolge
Sortierte Liste in Python
Liste der Python-Module
Geben Sie die Anzahl der CPU-Kerne in Python aus
[Python] Checklistenelemente alle, alle
Blasensortierung in Python
Holen Sie sich den Aufrufer einer Funktion in Python
Passen Sie die Verteilung jeder Gruppe in Python an
Filterliste in Python
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
der Zen von Python
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
[Memo] Python 3-Listensortierung
Ich möchte eine Liste in der Reihenfolge anderer Listen sortieren
Die findähnliche Sache der Liste in Python
Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Die Geschichte des Lesens von HSPICE-Daten in Python
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Lösen von Bewegungsgleichungen in Python (odeint)
Benutzerdefinierte Sortierung in Python3
Ausgabe in Form eines Python-Arrays
Suchen Sie nach dem Wert der Instanz in der Liste
Sortieren Sie Listenelemente in Python in der angegebenen Reihenfolge
Natürliche Ordnung in Python
[Python] Manipulation von Elementen in einer Liste (Array) [Sortieren]
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Verarbeitung (Python) Diagramm der Koordinaten der Liste Geben Sie an, wie oft in draw ()
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
Erleben Sie die gute Berechnungseffizienz der Vektorisierung in Python
In Python sortieren. Lassen Sie uns als nächstes über den Algorithmus nachdenken.
So ermitteln Sie die Anzahl der Stellen in Python
Zusammenfassung der Python-Sortierung (Liste, Wörterbuchtyp, Serie, DataFrame)
[Python] Manipulation von Elementen in der Liste (Array) [Hinzufügen / Löschen]
Die Geschichte von FileNotFound im Python open () -Modus = 'w'
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Implementieren Sie die Lösung der Riccati-Algebra in Python
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Den Inhalt der Daten in Python nicht kennen
Liste des Python-Codes, der bei der Big-Data-Analyse verwendet wird
[Python] Ruft die Liste der ExifTags-Namen der Pillow-Bibliothek ab