Отримати ім’я файлу без розширення в Python


91

Якщо у мене є ім’я файлу, подібне до одного з них:

1.1.1.1.1.jpg

1.1.jpg

1.jpg

Як я міг отримати лише ім'я файлу, без розширення? Чи підходить регулярний вираз?


Відповіді:


203

У більшості випадків не слід використовувати для цього регулярний вираз.

os.path.splitext(filename)[0]

Це також буде обробляти ім'я файлу, як .bashrcправильно, зберігаючи ціле ім'я.


4
Не працює належним чином з "git-1.7.8.tar.gz", де він лише видаляє ".gz". Я використовую basename[:-len(".tar.gz")]для цього.
посинено

28
@blueyed: "Не працює належним чином" - це питання перспективи. Файл є файлом gzip, основне ім'я якого - git-1.7.8.tar. Немає можливості правильно вгадати, скільки точок абонент хоче зачистити, тому знімається splitext()лише остання. Якщо ви хочете обробляти такі випадки .tar.gz, вам доведеться робити це вручну. Очевидно, що ви не можете позбавити всіх крапок, оскільки в підсумку ви отримаєте git-1.
Марсело Кантос,


10

Якби мені потрібно було зробити це за допомогою регулярного виразу, я б зробив це так:

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

7

Ви можете використовувати метод stem для отримання імені файлу.

Ось приклад:

from pathlib import Path

p = Path(r"\\some_directory\subdirectory\my_file.txt")
print(p.stem)
# my_file

6

Не потрібно регулярного виразу. os.path.splitextваш друг:

os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.