Как заменить (или удалить) расширение из имени файла в Python?
Есть ли встроенная функция в Python, которая заменит (или удалит) расширение файла (если оно есть)?
print replace_extension('/home/user/somefile.txt', '.jpg')
В моем примере: /home/user/somefile.txt станет /home/user/somefile.jpg
Я не знаю, имеет ли это значение, но мне нужно это для модуля SCons, который я пишу. (Так, возможно, есть какая-то особая функция SCons, которую я могу использовать?)
Я хотел бы что-нибудь чистое. Делая простую замену строки всех вхождений .txt внутри строки явно не чисто. (Это не удастся, если мое имя файла somefile.txt.txt.txt )
8 ответов
Попробуйте os.path.splitext, он должен делать то, что вы хотите.
import os print os.path.splitext('/home/user/somefile.txt')[0]+'.jpg'
Разбираясь в ответе AnaPana, как удалить расширение с помощью pathlib (Python> = 3.4):
>>> from pathlib import Path >>> filename = Path('/some/path/somefile.txt') >>> filename_wo_ext = filename.with_suffix('') >>> filename_replace_ext = filename.with_suffix('.jpg') >>> print(filename) /some/path/somefile.ext >>> print(filename_wo_ext) /some/path/somefile >>> print(filename_replace_ext) /some/path/somefile.jpg
Как сказал @jethro, splitext это аккуратный способ сделать это. Но в этом случае его довольно легко разбить самостоятельно, поскольку расширение должно быть частью имени файла, следующего за последним периодом:
filename = '/home/user/somefile.txt' print( filename.rsplit( ".", 1 )[ 0 ] ) # '/home/user/somefile'
rsplit говорит Python выполнить разбиение строки, начиная с правой части строки, и 1 говорит выполнить не более одного сплита (так что, например, ‘foo.bar.baz’ -> [ ‘foo.bar’, ‘baz’ ] ). поскольку rsplit всегда будет возвращать непустой массив, мы можем безопасно индексировать 0 в него, чтобы получить имя файла минус расширение.
Изменение расширения файла в Python
Предположим, что из index.py с CGI у меня есть файл сообщения foo.fasta для отображения файла. Я хочу изменить расширение файла foo.fasta как foo.aln в отображаемом файле. Как я могу это сделать?
6 ответов
import os thisFile = "mysequence.fasta" base = os.path.splitext(thisFile)[0] os.rename(thisFile, base + ".aln")
Мне нравится этот ответ больше, потому что он дает пример, а не просто приводит методы, необходимые для выполнения задачи. Спасибо @FryDay
# renamee is the file getting renamed, pre is the part of file name before extension and ext is current extension pre, ext = os.path.splitext(renamee) os.rename(renamee, pre + new_extension)
Используйте первую функцию, чтобы получить базу. Объедините его с новым расширением и передайте старое имя файла и новое имя файла второй функции.
Исправление: os.rename(root, root + new_extension) следует читать os.rename(renamee, root + new_extension)
на самом деле, лучше использовать этот метод вместо python3: pathlib.path (pathtofile) .with_suffix («. mynewext»). Способ, предложенный с помощью pathlib.path (pathtofile) .stem, работает, но удалит путь перед базовым именем.
Элегантный способ использования pathlib.Path:
from pathlib import Path p = Path('mysequence.fasta') p.rename(p.with_suffix('.aln'))
Хотя ОП не просил выполнить переименование, это было в тегах, и если вы собираетесь выполнить переименование и, если возможно, вход может иметь путь, а не просто имя файла, этот метод является правильным ,
Начиная с Python 3.4 там pathlib встроенная библиотека. Таким образом, код может выглядеть примерно так:
from pathlib import Path filename = "mysequence.fasta" new_filename = Path(filename).stem + ".aln"
Будьте осторожны — ствол также лишает пути, если он присутствует. Если вы хотите переименовать файл, и если указан путь (чего, по общему признанию, в вопросе не было), эта методика потерпит неудачу.
Кроме того, результатом является строка, а не Pathlib Path. p.parent / (p.stem + ‘.aln’) даст вам новый путь.
os.path.splitext("name.fasta")[0]+".aln"
Метод splitext отделяет имя от расширения, создающего кортеж:
созданный кортеж теперь содержит строки «имя» и «fasta». Затем вам нужно получить доступ только к строке «name», которая является первым элементом кортежа:
И затем вы хотите добавить новое расширение к этому имени:
os.path.splitext("name.fasta")[0]+".aln"
Помогите пожалуйста составить программу на языке Python.
Напишите функцию, которая заменяет расширение файла на заданное новое
расширение.
Введите имя файла: qq
Введите новое расширение: tmp
Результат: qq.tmp
Введите имя файла: qq.exe
Введите новое расширение: tmp
Результат: qq.tmp
Введите имя файла: qq.work .xml
Введите новое расширение: tmp
Результат: qq.work .tmp
Нужно импортировать модуль os, у которого есть методы os.path.splitext() и os.rename(). Методом os.path.splitext() можно разделить исходный файл на две части — его имя и разрешение, которое попадает в квадратные скобки как [0] — имя и [1] — разрешение. Далее нужно просто склеить имя с новым разрешением через os.rename().
#Переименовать файл из .raw в .txt
import os
file=»C:/Users/Vasya/Documents/Python/tangaria/scores.raw»
filename = os.path.splitext(file)[0]
os.rename(file, filename + «.txt»)
Вот пример программы на языке Python, которая заменяет расширение файла на заданное новое расширение:
def change_extension(filename, new_extension):
return '.'.join(filename.split('.')[:-1]) + '.' + new_extension
filename = input("Введите имя файла: ")
new_extension = input("Введите новое расширение: ")
print("Результат:", change_extension(filename, new_extension))
При запуске программы пользователь должен ввести имя файла и новое расширение. Затем программа вызывает функцию change_extension, которая разбивает имя файла на список по точкам, удаляет последний элемент (старое расширение) и добавляет новое расширение. Наконец, программа выводит результат в консоль.
Возможны погрешности и код может не работать.
Код на Python для выполнения данной задачи может выглядеть следующим образом:
«`python
def change_extension(filename, new_extension):
# Ищем последнюю точку в имени файла
dot_index = filename.rfind(‘.’)
# Если точка не найдена, то новое расширение будет добавлено в конец имени
if dot_index == -1:
return filename + ‘.’ + new_extension
# Иначе заменяем старое расширение на новое
return filename[:dot_index+1] + new_extension
# Пример использования функции
filename = input(‘Введите имя файла: ‘)
new_extension = input(‘Введите новое расширение: ‘)
result = change_extension(filename, new_extension)
print(‘Результат:’, result)
«`
В данном коде функция `change_extension` принимает на вход имя файла и новое расширение в качестве строковых аргументов. С помощью метода `rfind` мы ищем последнюю точку в имени файла и записываем её индекс в `dot_index`. Если точка не найдена, то новое расширение добавляется в конец имени файла с помощью оператора конкатенации строк. Если точка найдена, то мы заменяем старое расширение на новое с помощью среза строк, который извлекает часть имени файла до последней точки и добавляет к ней новое расширение.
Как переименовать файл с помощью Python
Есть ситуации, когда программисту может потребоваться переименовать файл с помощью кода на Python. Например, автоматическое переименование файлов в папке по определенному шаблону или изменение расширения файла.
К счастью, Python предоставляет встроенную библиотеку os , которая содержит различные функции для работы с операционной системой, включая переименование файлов.
Для начала необходимо импортировать библиотеку os следующим образом:
Теперь можно использовать функцию os.rename() , чтобы переименовать файл. Эта функция принимает два аргумента: текущее имя файла и новое имя файла.
import os os.rename('old_name.txt', 'new_name.txt')
В этом примере файл с именем old_name.txt будет переименован в new_name.txt .
Учтите, что файл должен существовать, иначе Python выдаст ошибку. Кроме того, при переименовании можно также изменить расширение файла. Например, следующий код переименует файл document.txt в document.pdf :
import os os.rename('document.txt', 'document.pdf')
При работе с файлами всегда важно обрабатывать возможные исключения. Например, если файл не существует или не доступен для переименования, операция может вызвать исключение. В таком случае, можно использовать блоки try/except для обработки этих исключений:
import os try: os.rename('non_existent_file.txt', 'new_name.txt') except FileNotFoundError: print("Файл не найден") except PermissionError: print("Нет доступа для переименования файла")
Таким образом, переименование файлов в Python — это простая задача, которую можно выполнить с помощью встроенной библиотеки os .