44 Stimmen

Vorteile von os.path.splitext gegenüber normalem .split?

Unter diese andere Frage zeigen die Stimmen eindeutig, dass die os.path.splitext Funktion wird der einfachen .split('.')[-1] String-Manipulation. Könnte mir jemand erklären, warum das so ist? Ist es schneller oder genauer oder was? Ich bin bereit zu akzeptieren, dass es etwas Besseres gibt, aber ich kann nicht sofort erkennen, was das sein könnte. Könnte es nicht übertrieben sein, ein ganzes Modul zu importieren, um dies zu tun, zumindest in einfachen Fällen?

EDIT: Die Spezifität des Betriebssystems ist ein großer Gewinn, der nicht sofort ersichtlich ist; aber selbst ich hätte den Fall "was, wenn es keinen Punkt gibt" erkennen müssen! Und vielen Dank an alle für die allgemeinen Kommentare zur Bibliotheksnutzung.

43voto

Lasse V. Karlsen Punkte 364542

Nun, es gibt verschiedene Implementierungen für verschiedene Betriebssysteme. Das bedeutet, dass, wenn die Logik zum Extrahieren der Erweiterung einer Datei auf Mac und Linux unterschiedlich ist, diese Unterscheidung von diesen Dingen gehandhabt wird. Ich weiß nichts von einer solchen Unterscheidung, also könnte es auch keine geben.


Modifier : @Brian kommentiert, dass ein Beispiel wie /directory.ext/file würde natürlich nicht mit einer einfachen .split('.') aufrufen, und Sie müssten sowohl wissen, dass Verzeichnisse Erweiterungen verwenden können, als auch, dass auf einigen Betriebssystemen der Schrägstrich ein gültiges Verzeichnis-Trennzeichen ist.

Dies unterstreicht nur die eine Bibliotheksroutine zu verwenden, es sei denn, Sie haben einen guten Grund, dies nicht zu tun Teil meiner Antwort.

感謝 @Brian .


Wenn eine Datei keine Erweiterung hat, müssen Sie außerdem eine Logik einbauen, um diesen Fall zu behandeln. Und was ist, wenn das, was Sie aufzuteilen versuchen, ein Verzeichnisname ist, der mit einem Backslash endet? Weder ein Dateiname noch eine Erweiterung.

Die Regel sollte lauten: Wenn Sie keinen besonderen Grund haben, eine Bibliotheksfunktion nicht zu verwenden, die das tut, was Sie wollen, verwenden Sie sie. So vermeiden Sie, dass Sie Code pflegen und Fehler beheben müssen, für den andere bereits gute Lösungen haben.

15voto

Andrew Grant Punkte 57342

Os.path.splitext behandelt den Fall, dass die Datei keine Erweiterung hat, korrekt und gibt einen leeren String zurück. .split gibt den Namen der Datei zurück.

13voto

codelogic Punkte 68703

splitext() sucht in umgekehrter Richtung nach '.' und gibt den Teil der Erweiterung zurück, sobald er ihn findet. split('.') führt eine Vorwärtssuche nach allen '.'-Zeichen durch und ist daher fast immer langsamer. Mit anderen Worten splitext() ist speziell für die Rückgabe der Erweiterung geschrieben, im Gegensatz zu split() .

(siehe posixpath.py im Python-Quelltext, wenn Sie die Implementierung untersuchen möchten).

6voto

bobince Punkte 512550

Es gibt Betriebssysteme, die '.' nicht als Erweiterungstrennzeichen verwenden.

(Bemerkenswert ist, dass RISC OS per Konvention '/' verwendet, da '.' dort als Pfadseparator verwendet wird).

2voto

Allen Rice Punkte 18580

Eine klar definierte und dokumentierte Methode, um die Dateierweiterung zu ermitteln, wäre immer einer willkürlichen Aufteilung einer Zeichenkette vorzuziehen, da diese Methode aus verschiedenen Gründen anfälliger ist.

Edit: Dies ist nicht sprachspezifisch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X