Get

2010-12-14 10 views
75

Wenn ich einen Dateinamen wie eine von ihnen habe:Get

1.1.1.1.1.jpg 

1.1.jpg 

1.jpg 

Wie kann ich nur die Dateinamen zu bekommen, ohne die Erweiterung? Wäre ein Regex angemessen?

Antwort

172

In den meisten Fällen sollten Sie keine Regex dafür verwenden.

os.path.splitext(filename)[0] 

Dies wird auch einen Dateinamen wie .bashrc korrekt durch den ganzen Namen zu halten handhaben.

+0

@nate c: Ich geändert meine Antwort, während Sie Ihren Kommentar schreiben . –

+2

Funktioniert nicht ordnungsgemäß mit "git-1.7.8.tar.gz", wo es nur die ".gz" entfernt. Ich benutze 'basename [: - len (". Tar.gz ")]' dafür. – blueyed

+25

@blueyed: "Funktioniert nicht richtig" ist eine Frage der Perspektive. Die Datei * ist * eine Gzip-Datei, deren Basisname 'git-1.7.8.tar' ist. Es gibt keine Möglichkeit, richtig zu erraten, wie viele Punkte der Anrufer entfernen möchte, sodass 'splitext()' nur die letzte löscht. Wenn Sie Edge-Cases wie '.tar.gz' bearbeiten wollen, müssen Sie das von Hand machen. Natürlich können Sie nicht alle Punkte entfernen, da Sie mit "git-1" enden. –

21
>>> import os 
>>> os.path.splitext("1.1.1.1.1.jpg") 
('1.1.1.1.1', '.jpg') 
5

Keine Notwendigkeit für Regex. os.path.splitext ist dein Freund:

os.path.splitext('1.1.1.jpg') 
>>> ('1.1.1', '.jpg') 
8

Wenn ich dies mit einem regulären Ausdruck zu tun habe, habe ich es so tun würde:

s = re.sub(r'\.jpg$', '', s)