2010-12-14 3 views

ответ

172

В большинстве случаев вам не следует использовать регулярное выражение.

os.path.splitext(filename)[0] 

Это также будет обрабатывать имя файла, как .bashrc правильно, сохраняя полное имя.

+0

@nate C: Я поправками свой ответ в то время как вы пишете свой комментарий , –

+2

Не работает должным образом с «git-1.7.8.tar.gz», где он удаляет только «.gz». Для этого я использую 'basename [: - len (". Tar.gz ")]. – blueyed

+25

@blueyed: «Не работает должным образом» - вопрос перспективы. Файл * является * gzip-файлом, базовым именем которого является 'git-1.7.8.tar'. Невозможно правильно догадаться, сколько точек, которые вызывающий хочет отключить, поэтому 'splitext()' только разделяет последний. Если вы хотите обрабатывать крайние регистры типа '.tar.gz', вам придется делать это вручную. Очевидно, вы не можете удалить все точки, так как вы получите «git-1». –

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

Нет необходимости в регулярном выражении. os.path.splitext ваш друг:

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

Если бы я должен был сделать это с помощью регулярных выражений, я бы сделал это так:

s = re.sub(r'\.jpg$', '', s) 
Смежные вопросы