Funktioniert nicht richtig mit "git-1.7.8.tar.gz", wo nur die ".gz" entfernt wird. Ich benutze basename[:-len(".tar.gz")]dafür.
blau
28
@blueyed: "Funktioniert nicht richtig" ist eine Frage der Perspektive. Die Datei ist eine gzip-Datei mit dem Basisnamen git-1.7.8.tar. Es gibt keine Möglichkeit, richtig zu erraten, wie viele Punkte der Anrufer entfernen möchte, daher wird splitext()nur der letzte entfernt. Wenn Sie mit Randfällen wie umgehen möchten, .tar.gzmüssen Sie dies von Hand tun. Natürlich können Sie nicht alle Punkte entfernen, da Sie am Ende mit git-1.
Marcelo Cantos
26
>>>import os
>>> os.path.splitext("1.1.1.1.1.jpg")('1.1.1.1.1','.jpg')
Antworten:
In den meisten Fällen sollten Sie dafür keinen regulären Ausdruck verwenden.
Dadurch wird auch ein Dateiname wie
.bashrc
korrekt behandelt, indem der gesamte Name beibehalten wird.quelle
basename[:-len(".tar.gz")]
dafür.git-1.7.8.tar
. Es gibt keine Möglichkeit, richtig zu erraten, wie viele Punkte der Anrufer entfernen möchte, daher wirdsplitext()
nur der letzte entfernt. Wenn Sie mit Randfällen wie umgehen möchten,.tar.gz
müssen Sie dies von Hand tun. Natürlich können Sie nicht alle Punkte entfernen, da Sie am Ende mitgit-1
.quelle
Wenn ich das mit einem regulären Ausdruck machen müsste, würde ich es so machen:
quelle
Keine Notwendigkeit für Regex.
os.path.splitext
ist dein Freund:quelle
Sie können die Stammmethode verwenden, um den Dateinamen abzurufen.
Hier ist ein Beispiel:
quelle