Перейти к содержимому

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

  • автор:

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

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

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

Отслеживать
user448066
задан 1 июл 2021 в 18:27
37 1 1 серебряный знак 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 элементов (если разделитель не будет найден, то первые два элемента будут пустыми строками).

Как убрать расширения в конце названий файлов (.jpeg, .mp3 и т. д.)?

Нажимаем свойства папак, и там будет такая графа показывать расшерения файлов нажимаем да, и после этого выбирае файл и меняем расширения вот так вот например: фото1.jpeg после точки и есть расширения файла можно поменять вот так после точки фото1.tiff

через программу Total Commander, программа файловый менеджер, умеет и групповое переименование делать и форматировать разделы и копировать с одного места в другое и архивировать и еще много чего

открой сервис. свойства папки. поставь или сними там галочку показывать расширения для зарегистрированных типов файлов. (или как то так)

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

Подсунули мне тут завирусованный комп с виндой на борту, где «вирус» подобавлял расширения «.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

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

покупка

doc найти позицию n-го вхождения символа 1

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

Общая формула:

=LEFT(filename,FIND(«.»,filename)-1)

аргументы

Filename: the text string you want to remove the extension from.

Возвращаемое значение

Формула возвращает содержимое ячейки без расширения.

Как работает эта формула

Пример: Чтобы удалить расширение из имен файлов в столбце B3: B5, используйте приведенную ниже формулу в C3: C5.

=LEFT(B3,FIND(«.»,B3)-1)

документ удалить расширение 2

Нажмите Enter клавиши, чтобы получить результат в C3, затем перетащите дескриптор заполнения в C5.

объяснение

FIND(«.»,B3) : НАЙТИ функция возвращает позицию определенного символа. Здесь эта формула получает позицию символа «.».

=LEFT(B3,FIND(«.»,B3)-1) : ЛЕВЫЙ функция извлекает текст из левой части текстовой строки. Здесь шаги расчета этой формулы будут показаны ниже:
=LEFT(B3,FIND(«.»,B3)-1)
=LEFT(B3,6-1)
=LEFT(B3,5)

Что возвращает пять символов в левой части текстовой строки в ячейке B3.

замечание

документ удалить расширение 3

Если в ячейке есть два или более имен файлов с расширениями, эта формула возвращает только первое имя файла. Смотрите скриншот:

Файл примера

Относительные формулы
  • Найдите наиболее востребованный текст с критериями
    В некоторых случаях вам может потребоваться найти наиболее часто встречающийся текст на основе критерия в Excel. В этом руководстве вводится формула массива для выполнения этой задачи и дается объяснение аргументов этой формулы.
  • Объединить ячейки запятыми
    Здесь в этом руководстве представлены некоторые формулы для объединения нескольких ячеек в одну с запятой в качестве разделителя, как показано на скриншоте ниже, а также объясняется, как формулы работают в Excel.
  • Сделать текст одинаковой длины
    Если есть список текстов разной длины, чтобы выглядеть лучше, вы можете сделать этот текст одинаковой длины, добавив завершающие символы, как показано на скриншоте ниже. Здесь представлена ​​формула, которая объединяет функции LEN и REPT для обработки в Excel.
  • Проверить, содержит ли ячейка номер
    Иногда вам может потребоваться проверить, содержит ли ячейка числовые символы. В этом руководстве представлена ​​формула, которая вернет ИСТИНА, если ячейка содержит число, и ЛОЖЬ, если ячейка не содержит числа.

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

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