Die meisten Betriebssysteme geben keine starken Garantien über die Reihenfolge, in der Dateien in einem Ordner angezeigt werden. Einige Dateisysteme haben eine vorhersagbare Reihenfolge (z. B. Sortierung nach Erstellungsdatum), aber da die meisten Betriebssysteme mehrere verschiedene Dateisysteme (die möglicherweise unterschiedliche Ordnungen haben) unterstützen, hilft das nicht viel. Stattdessen ist es normalerweise Sache jedes Client-Programms, das die Dateinamen liest, um sie selbst zu sortieren, wenn es die Reihenfolge interessiert. Viele Low-Level-Programme kümmern sich nicht um die Reihenfolge, also ist dies wahrscheinlich eine vernünftige Wahl für die OS-Designer (die nicht den Overhead der Sortierung der Dateinamen auferlegen wollen, wenn sie nicht benötigt werden).
Also, das Problem, das Sie haben, ist nicht wirklich ein Problem mit Ihrem Python-Code. Es ist eher ein Problem mit Ihrer IDE, das Sie wahrscheinlich nicht ändern können. Es sortiert die Ordner, die Sie lexikografisch erstellt haben, was bedeutet, dass 10
vor 2
kommt, genau wie ba
vor c
in alphabetischer Reihenfolge kommt. Wenn Ihre IDE nicht über einige Funktionen verfügt, um ihre Sortiermethode zu ändern (was unwahrscheinlich erscheint), können Sie das wahrscheinlich nicht direkt beheben.
Der von Ihrem Betriebssystem bereitgestellte Dateimanager sortiert möglicherweise anders (und gibt mehr Optionen für das Sortieren). Viele Programme benutzen eine sogenannte "natürliche Sortierung" für Dateinamen. Dadurch werden die Namen in numerische und nicht-numerische Teile getrennt und dann jeweils als separater Schritt der Sortierung verwendet (wobei die entsprechenden numerischen Teile nach Zahl und nicht lexikografisch sortiert sind). Wenn Sie Ihren eigenen Code schreiben, um die Ordner anzuzeigen, müssen Sie das möglicherweise replizieren, aber in der aktuellen Situation scheint es nicht notwendig zu sein.
Was Ihnen helfen könnte, ist, die Namen zu zero-Pad. Erstellen Sie keine Ordner mit den Namen 1
und 2
, sondern erstellen Sie 01
und 02
. Dann wird eine naive Art 10
nach 09
statt zwischen 1
und 2
setzen.Hier ist, wie Sie Ihre Ordner Erstellung Logik ändern können mit Nullen aufgefüllt Zahlen zu arbeiten:
zoom_levels = [i for i in range(zoom_min, zoom + 1)]
folders_for_xtiles = [k for k in range(0, 2 ** zoom]
for zoom_level, folder_for_xtile in itertools.product(zoom_levels, folders_for_xtiles):
os.makedirs(os.path.join(path_to_tiles_folder,
format(zoom_level, '02'),
format(folder_for_xtile, '02')))
Die wichtigste Änderung ist format
zu verwenden, anstatt str
die Zahlen in Strings zu drehen. Ich übergebe den 02
Formatierungscode, um Python zu sagen, die Zahlen auf zwei Ziffern mit führenden Nullen aufzufüllen. Beachten Sie, dass ich die sorted
Anrufe aus der Liste Comprehensions entfernt habe, da sie nichts getan haben (range
produziert bereits Ergebnisse in aufsteigender Reihenfolge, nicht dass es wirklich wichtig für unsere Zwecke ist).
Der letzte Codeblock, den Sie anzeigen, schlägt vor, dass Sie beim Zugriff auf die Ordner die Namen direkt nach Nummer neu erstellen, anstatt die Ordner zu durchsuchen und das Betriebssystem nach den Namen zu fragen. Wenn Sie das tun, müssen Sie sich nicht um die Reihenfolge kümmern, in der die Ordner erstellt wurden (oder in der Reihenfolge, in der sie in einem anderen Programm angezeigt werden). Wenn Sie die Nummern in der richtigen Reihenfolge erstellen, greifen Sie auch in der richtigen Reihenfolge auf die Ordner zu. Es spielt keine Rolle, welche Reihenfolge das Dateisystem bietet, da Sie das Dateisystem nicht danach fragen, welche Ordner es gibt, da Sie deren Namen im Voraus kennen.
Beobachten Sie nur die Ordner in Ihrer IDE oder haben Sie internen Code, der sie in einer bestimmten Reihenfolge liest? Ich weiß nicht, dass Python irgendetwas tun kann, um die Reihenfolge zu ändern, in der die IDE die Ordner anzeigt (es tut wahrscheinlich seine eigene Sortierung). Sie können die Reihenfolge, in der anderer Code die Dateien liest, kontrollieren (oder nicht). – Blckknght
Vielen Dank für Ihre detaillierten Erklärungen, es kann tatsächlich funktionieren. Ja, ich beobachte solche Reihenfolge meiner Ordner in Pycharm IDE. Vielleicht betrifft es nur die IDE, denn wenn ich diese Struktur über die normale Ordneröffnung in Windows öffne, wird sie sortiert angezeigt. –