2016-12-21 5 views
0

Ich habe eine grundlegende Frage über die Bestellung in scandir Funktion. Bisher habe ich Manpages für POSIX readdir gelesen und keine spezifischen Informationen über Bestellgarantien gefunden.Python scandir() Bestellung POSIX readdir Bestellung

Aber wenn ich über ein großes Verzeichnis iteriere (das kann nicht geändert werden, nur lesen), beobachte ich die gleichen Ergebnisse über mehrere Systeme (Fedora 24 und Ubuntu 16.04).

Was ist der Grund für dieses Verhalten? Wo kann ich mehr darüber lesen?

Wenn ich Bestellung bestand, sollte ich meinen eigenen Wrapper um POSIX scandir geschrieben haben oder kennt jemand bestehende Implementierung für Python?

+0

Ja, in Python benötigen Sie einen Wrapper: ["Die Einträge werden in beliebiger Reihenfolge ausgegeben"] (https://docs.python.org/3/library/os.html#os.scandir). –

Antwort

0

Man Seite für readdir ist eindeutig:

Die Reihenfolge, in der die Dateinamen durch aufeinanderfolgende Aufrufe readdir gelesen werden() hängt von der Dateisystem-Implementierung; es ist unwahrscheinlich , dass die Namen in irgendeiner Weise sortiert werden.

In den meisten Implementierungen ist ein Verzeichnis, eine sequenzielle Liste Einträge und beide readdir und scandir die darunter liegende Reihenfolge. Wenn Sie ähnliche Dateisysteme in einer anderen Linux-Version verwenden und das Verzeichnis in der gleichen Reihenfolge füllen, ist es wahrscheinlich, dass readdir auch die gleiche Reihenfolge angibt. Die Reihenfolge ist nicht zufällig und ist absolut deterministisch und reproduzierbar, vorausgesetzt, Sie fügen keine Dateien hinzu, entfernen oder benennen sie nicht um (zumindest einmal ist das Dateisystem stabil, weil einige Aktionen verzögern können). Einfach ist es nicht voraussagbar von den Dateinamen.

Wenn Sie also eine konsistente Reihenfolge wünschen, müssen Sie sich mit der Bestellung befassen.