Как удалить расширение у файла
Перейти к содержимому

Как удалить расширение у файла

  • автор:

Удаление расширения имени файла через Python

Писал скрипт частью функционала которого является добавление к файлу второго расширения. Было например file.txt и стало file.txt.lol . Второй скрипт должен стереть второе расширение чтобы обратно стало file.txt . Как это можно реализовать?

os.rename(file.txt, file.txt + ".lol") 

Отслеживать
user448066
задан 1 июл 2021 в 18:27
37 5 5 бронзовых знаков
1 июл 2021 в 18:40

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

from os import path name = 'file.txt.lol' no_lol, lol = path.splitext(name) # В первую переменную попадет 'file.txt', во вторую - '.lol' 
from pathlib import Path path = Path('file.txt.lol') print(path.stem) # Выведет file.txt (имя файла без расширения) print(path.suffix) # Выведет .lol 

Еще вариант, когда есть путь (а не просто имя файла), нужно убрать расширение:

from pathlib import Path path = Path('somedir/file.txt.lol') print(str(path.with_suffix('')) # Выведет somedir/file.txt # Стандартные функции Python умеют работать с объектами Path # Переименовать файл из somedir/file.txt.lol в somedir/file.txt os.rename(path, path.with_suffix('')) 

Дальше варианты через методы строки, но тут нужно быть аккуратным, т.к. строка не понимает, что внутри нее путь, и с точки зрения строки ‘some.path/file’ часть ‘path/file’ внезапно может оказаться расширением, в то время как функции из os.path и pathlib поймут, где часть пути, а где расширение.

Средствами str.rpartition (разбить по самому правому разделителю):

name = 'file.txt.lol' name, dot, lol = name.rpartition('.') # name='file.txt', dot='.', lol='lol' 

Это примерно аналогично str.rsplit с maxsplit=1 :

name = 'file.txt.lol' name, lol = name.rsplit('.', maxplit=1) 

Единственно, rsplit вернет список из 1 элемента, если точки нет (из-за этого присваивание в две переменные упадет с ошибкой), а rpartition всегда возвращает кортеж из 3 элементов (если разделитель не будет найден, то первые два элемента будут пустыми строками).

Как включить или отключить отображение расширений файлов

Привет друзья, решил написать небольшую заметку о том, как включить или отключить отображение расширений файлов, думаю такой совет может кому-то пригодится.

Для начала напишу, что такое расширения файлов. Расширения файлов — это те цифры и числа, которые стоят после последний точки в имени файла. С помощью расширений операционная система идентифицирует файлы. Так же, операционная система для каждого вида расширений подбирает программу, через которую файл с соответствующим расширением будет открываться. Думаю, что понятнее будет на примере. Вот некоторые расширения для примеров *.jpg, *.avi, *.mpeg, *.doc, *.rar, *.zip *.txt. Например все файлы с расширением *.txt по умолчанию открываются программой «Блокнот» . Но Вы самостоятельно можете указывать программы для каждого вида расширений. Ну думаю понятно, что такое расширения файлов.

По умолчанию операционная система Windows не отображает расширения файлов и они выгладят вот так:

не отображаются расширения файлов

Для того, что бы включить/отклчить расширения файлов, делаем так: (я буду приводить пример на операционной системе Wondows 7)

1. Заходим в «Мой компьютер» и верху слева нажимаем на «Упорядочить» и выберем «Параметры папок и поиска» видим такое окно:

Параметры папок и поиска

2. Дальше переходим на вкладку «Вид» и прокручиваем ползунок к самому низу. Находим в списке «Скрывать расширения для зарегистрированных типов файлов «

3. Сейчас самый главный момент. Если вы хотите включить отображение расширения файлов, то снимаем галочку с пункта Находим в списке «Скрывать расширения для зарегистрированных типов файлов « , а если хотите отключить, то ставим галочку. После этого, нажимаем «Применить» и «ОК» .

Все, теперь расширения файлов будут отображаться или же наоборот, не будут отображаться. Думаю не сложно написал. Удачи!

Понравилась статья? Оцените её:

Как убрать расширение файла, и отображать толко имя файла?

«a» отображается как «****.txt» как сделать, чтобы отображалось только само имя файла? — «***» ??

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как вытащить из ini-файла имя файла?
Кто знает, помогите плз. В макросе под Excel надо вытащить из ini-файла имя файла, чтобы потом его.

Ввести имя файла (с расширением) и заменить его на расширение «.exe»
Ввести имя файла( с расширением )и Заменить его на расширение ".exe" Помогите кто чем может)

Дана строка, содержащая полное имя файла. Выделить из этой строки имя и расширение файла
дана строка, содержащая полное имя файла, т.е. имя диска, список каналов(путь), собственно имя и.

Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить из строки только имя первого католога
Помогите пожалуйста. Залание: Дано полное имя файла, т.е путь к файлу, имя и расширение.

695 / 236 / 18
Регистрация: 17.01.2011
Сообщений: 583
Записей в блоге: 1

Вот так. Но работает с расширением из трёх букв.

s = «Филипс.pdf»
s = Mid(s, 1, Len(s) — 4)

Если файл имеет расширение из 4-х букв например: «Сравнение адресов.xlsm» , надо вместо 4 написать написать 5.

s = «Сравнение адресов.xlsm»
s = Mid(s, 1, Len(s) — 5)

Регистрация: 12.03.2011
Сообщений: 560

Не понятно-зачем это нужно-расширение файла характеризует свойство файла в системе.
Убрав расширение ,файл становится не сопоставим в системе и нечитается ни одной программой.
В чем замысел убрать расширение,а оставить одно имя?

6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298

Mid(s, 1, Len(s) - InStr(1, StrReverse(s), "."))

1525 / 494 / 58
Регистрация: 10.04.2009
Сообщений: 8,326

ЦитатаСообщение от solomonov Посмотреть сообщение

Не понятно-зачем это нужно-расширение файла характеризует свойство файла в системе.
Убрав расширение ,файл становится не сопоставим в системе и нечитается ни одной программой.
В чем замысел убрать расширение,а оставить одно имя?

Не правильный подход, говорит юзер надо, значит надо:

1 2 3 4
Полное_имя_файла_с_расширением_и_местом_его_нахождения = ActiveDocument.FullName Имя_файла_с_расширением = ActiveDocument.Name Имя_файла_без_расширения = CreateOb-ject("Scripting.FileSystemObject").GetBaseName(ActiveDocument.Name) Расширение_файла = CreateOb-ject("Scripting.FileSystemObject").GetExtensionName(ActiveDocument)

Добавлено через 4 минуты
что то правка не работает, одним словом вместо
CreateOb-ject
надо
CreateObject

Регистрация: 14.03.2011
Сообщений: 55

ЦитатаСообщение от solomonov Посмотреть сообщение

Не понятно-зачем это нужно-расширение файла характеризует свойство файла в системе.
Убрав расширение ,файл становится не сопоставим в системе и нечитается ни одной программой.
В чем замысел убрать расширение,а оставить одно имя?

мне это нужно для того чтобы помимо открытия файлов .тхт и копирования данных из них во вновь созданную книгу, мог сразу создават листы с названием по файлу .тхт

например открываю файл 123.тхт и копирую из него данные во вновь созданный лист 123

может это можно было сделать и другим способом, но у меня возникла такая мысль..

Добавлено через 1 час 19 минут
Спасибо товарищи, оба способа работают безупречно

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Узнать расширение и имя файла
Тяжелые времена в жизни, с WinAPI приходится возиться. Подскажите, как я могу узнать расширение.

Убрать расширение из имени файла
Установил Windows 8.1 Может что не так сделал, но у меня теперь каждый документ подписан.

Вытащить имя файла и расширение используя regex
В общем стоит задача проверить относительную часть ссылки на валидность и при этом вытащить нужные.

Найти файлы с расширением и удалить расширение из названия

Подсунули мне тут завирусованный комп с виндой на борту, где «вирус» подобавлял расширения «.blahblah» к имени файла.

find . -name ".blahblah"

файлы успешно находит. Что подсунуть в команду, чтоб условный «*.jpeg.blahblah» превратился в «*.jpeg»?

dvrts ★★★
01.02.15 21:16:47 MSK
anonymous
( 01.02.15 21:17:42 MSK )
Ответ на: комментарий от anonymous 01.02.15 21:17:42 MSK

Очевидно, но нельзя — файлы важные и как водится, без бекапа

dvrts ★★★
( 01.02.15 21:24:48 MSK ) автор топика

kir@localhost ~/test/test_to_rm $ ls photo.jpg photo.jpg.blahblah kir@localhost ~/test/test_to_rm $ find . -name ".blahblah" kir@localhost ~/test/test_to_rm $ find . -name "*.blahblah" ./photo.jpg.blahblah kir@localhost ~/test/test_to_rm $ find . -name "*.blahblah"|sed -e 's/\.blahblah//' ./photo.jpg kir@localhost ~/test/test_to_rm $ ls photo.jpg photo.jpg.blahblah kir@localhost ~/test/test_to_rm $ for i in `find . -name "*.blahblah"`; do mv $i $(ls $i|sed -e 's/\.blahblah//'); done kir@localhost ~/test/test_to_rm $ ls photo.jpg kir@localhost ~/test/test_to_rm $ 

kir64 ★★
( 01.02.15 21:27:18 MSK )

find $PATH -name «*.blahblah» | while read a; do (допишешь сам комбинацию с sed + mv); done

reprimand ★★★★★
( 01.02.15 21:28:32 MSK )
Ответ на: комментарий от reprimand 01.02.15 21:28:32 MSK

надо же, меня опередили! 🙂 да еще и с рабочим примером

reprimand ★★★★★
( 01.02.15 21:29:10 MSK )
Ответ на: комментарий от dvrts 01.02.15 21:24:48 MSK

Раз важные, сначала замени в моём варианте mv на cp, потом если всё ок — прогонишь rm по маске, как и проповедует anonymous выше.

kir64 ★★
( 01.02.15 21:30:15 MSK )

#!/bin/bash if [ $# == 0 ]; then find . -name '*.blahblah' -exec $0 <> \; else echo mv "$1" "$" fi 

anonymous
( 01.02.15 21:31:13 MSK )
Ответ на: комментарий от kir64 01.02.15 21:27:18 MSK

а если по делу, тогда тут:

sed -e 's/\.blahblah//' 
sed -e 's/\.blahblah$//' 

anonymous
( 01.02.15 21:33:05 MSK )
Ответ на: комментарий от anonymous 01.02.15 21:33:05 MSK

kir@localhost ~/test/test_to_rm $ ls photo.jpg photo.jpg.blahblah photo.jpg.blahblah.somethingelse kir@localhost ~/test/test_to_rm $ find . -name "*.blahblah" ./photo.jpg.blahblah kir@localhost ~/test/test_to_rm $ find . -name "*.blahblah*" ./photo.jpg.blahblah.somethingelse ./photo.jpg.blahblah kir@localhost ~/test/test_to_rm $ for i in `find . -name "*.blahblah"`; do mv $i $(ls $i|sed -e 's/\.blahblah//'); done kir@localhost ~/test/test_to_rm $ ls photo.jpg photo.jpg.blahblah.somethingelse kir@localhost ~/test/test_to_rm $ 

kir64 ★★
( 01.02.15 21:36:04 MSK )
Ответ на: комментарий от kir64 01.02.15 21:36:04 MSK

да ты просто не поверишь, но:

$ touch "qwe.blahblah.asd.blahblah" $ find . -name "*.blahblah" | sed -e 's/\.blahblah//' ./qwe.asd.blahblah 

anonymous
( 01.02.15 21:39:24 MSK )
Ответ на: комментарий от kir64 01.02.15 21:27:18 MSK

Все хорошо, но во многих директориях высыпает ошибки вида:

ls: cannot access Files/K-Lite: No such file or directory
cp: missing destination file operand after ‘Files/K-Lite’
Try ‘cp —help’ for more information.

С mv аналогично.

dvrts ★★★
( 01.02.15 21:39:54 MSK ) автор топика
Ответ на: комментарий от anonymous 01.02.15 21:39:24 MSK

Ох ты ж, об этом я не подумал, ты прав. Надеюсь, если ТС уже запустил однострочник, ему не попадется такая ситуация.

kir64 ★★
( 01.02.15 21:42:49 MSK )
Ответ на: комментарий от kir64 01.02.15 21:42:49 MSK

Не попадется, но есть проблема выше, подозреваю с путями

dvrts ★★★
( 01.02.15 21:43:37 MSK ) автор топика
Ответ на: комментарий от dvrts 01.02.15 21:39:54 MSK

YAR ★★★★★
( 01.02.15 21:43:54 MSK )
Ответ на: комментарий от dvrts 01.02.15 21:39:54 MSK

mv $i $(ls $i|sed -e 's/\.blahblah//') 

поменяй на эту:

echo mv "$i" "$" 

потом убери echo
anonymous
( 01.02.15 21:44:07 MSK )
Ответ на: комментарий от YAR 01.02.15 21:43:54 MSK

dvrts ★★★
( 01.02.15 21:45:17 MSK ) автор топика
Ответ на: комментарий от dvrts 01.02.15 21:43:37 MSK

Не с путями, а с пробелами в имени.

kir64 ★★
( 01.02.15 21:49:33 MSK )
Ответ на: комментарий от dvrts 01.02.15 21:45:17 MSK

На пост выше уже привели исправленный пример

YAR ★★★★★
( 01.02.15 21:50:31 MSK )

rename 's/.blahblah//gi' ./*.blahblah 

Dron ★★★★★
( 01.02.15 21:50:37 MSK )
Последнее исправление: Dron 01.02.15 21:50:45 MSK (всего исправлений: 1)

Ответ на: комментарий от YAR 01.02.15 21:50:31 MSK

 for i in `find . -name "*.blahblah"`; do mv "$i" "$"; done 

dvrts ★★★
( 01.02.15 21:54:38 MSK ) автор топика
Ответ на: комментарий от dvrts 01.02.15 21:54:38 MSK

 find . -name "*.blahblah" | while read file ; do mv "$" "$" ; done 

На что ругается-то хоть?

YAR ★★★★★
( 01.02.15 21:58:56 MSK )
Ответ на: комментарий от dvrts 01.02.15 21:54:38 MSK

UPD: //slowpoke, выше уже ответили верно

kir@localhost ~/test/test_to_rm $ ls file with spaces in filename.jpg file with spaces in filename.jpg.blahblah kir@localhost ~/test/test_to_rm $ ls -l итого 0 -rw-r--r-- 1 kir kir 0 фев 1 21:44 file with spaces in filename.jpg -rw-r--r-- 1 kir kir 0 фев 1 22:20 file with spaces in filename.jpg.blahblah kir@localhost ~/test/test_to_rm $ find . -type f -name '*.blahblah' | while read file; do mv "$file" "$"; done kir@localhost ~/test/test_to_rm $ ls -l итого 0 -rw-r--r-- 1 kir kir 0 фев 1 22:20 file with spaces in filename.jpg kir@localhost ~/test/test_to_rm $ 

kir64 ★★
( 01.02.15 22:22:25 MSK )
Последнее исправление: kir64 01.02.15 22:23:45 MSK (всего исправлений: 1)

Ответ на: комментарий от kir64 01.02.15 22:22:25 MSK

Яйца отрывать тем, кто допускает пробелы в именах файлов!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *