Как переименовать файл в Python: практическое руководство с кодом

Раздел: Файловая система -> Файловый ввод-вывод

Переименование файлов в Python

Основной способ переименовать файл в Python - использование функции os.rename() из модуля os. Эта функция принимает два аргумента: исходный путь и новый путь (включая имя файла).

import os

old_name = 'old_file.txt'
new_name = 'new_file.txt'
os.rename(old_name, new_name)

ввод программ на python (ввод данных в программе python)

Если файл успешно переименован, функция не возвращает никакого значения. При возникновении ошибки (например, файл не существует или у программы нет прав) вызывается исключение.

Типичные ошибки и их решение:

  • FileNotFoundError: исходный файл не найден. Проверьте путь и имя файла, используйте os.path.exists() для проверки.
  • PermissionError: недостаточно прав для переименования. Запустите программу с соответствующими правами или измените атрибуты файла.
  • FileExistsError (в Windows): файл с новым именем уже существует. В Windows os.rename() не перезаписывает существующий файл, в Unix - перезаписывает. Для кроссплатформенной работы используйте os.replace().

Как переименовать файл с перемещением между разными файловыми системами?

Функция os.rename() работает только в рамках одной файловой системы. Для перемещения файла между разными разделами или дисками используйте shutil.move():

import shutil

shutil.move('source.txt', 'destination/new_name.txt')

Python file io (ввод-вывод файлов в python)

Если целевой путь расположен на другом устройстве, shutil.move() сначала копирует файл, а затем удаляет исходный.

Потенциальные проблемы:

  • При копировании могут отличаться метаданные (время создания, атрибуты).
  • Если целевой файл уже существует, shutil.move() по умолчанию вызовет FileExistsError (начиная с Python 3.8). Для перезаписи используйте параметр copy_function=shutil.copy2 и предварительно удалите целевой файл.

Как переименовать файл, используя объектно-ориентированный подход (pathlib)?

Модуль pathlib предоставляет более современный интерфейс для работы с путями. Метод Path.rename() делает то же самое, что и os.rename():

from pathlib import Path

old = Path('old_file.txt')
new = Path('new_file.txt')
old.rename(new)

Python temp files (временные файлы в python)

Метод возвращает Path объект нового пути. Ошибки те же, что и у os.rename().

Особенности:

  • Использование pathlib делает код читаемее, особенно при сложной работе с путями.
  • Для перезаписи существующего файла cross-platform используйте Path.replace().
Как переименовать файл с проверкой на существование и обработкой ошибок?

Рекомендуется всегда оборачивать переименование в блок try-except и проверять существование исходного файла:

from pathlib import Path

old_path = Path('data.txt')
new_path = Path('data_new.txt')

if old_path.exists():
    try:
        old_path.rename(new_path)
        print(f'Файл переименован в {new_path}')
    except PermissionError:
        print('Нет прав на переименование')
    except FileExistsError:
        print('Файл уже существует. Используйте replace()')
        old_path.replace(new_path)
else:
    print('Исходный файл не существует')

Python index files (индексация файлов в python)

Как массово переименовать файлы по шаблону?

Например, добавить префикс ко всем файлам .txt в папке:

import os

folder = 'docs'
prefix = 'backup_'
for filename in os.listdir(folder):
    if filename.endswith('.txt'):
        old = os.path.join(folder, filename)
        new = os.path.join(folder, prefix + filename)
        os.rename(old, new)

Возможные проблемы:

  • Если в папке есть подпапки, os.listdir() вернёт и их имена, что может вызвать ошибку при попытке переименовать папку в то же имя с префиксом (но это тоже допустимо).
  • Имена файлов могут содержать недопустимые символы для новой файловой системы (например, двоеточие в Windows). Проверяйте имена перед переименованием.
- Python config files (конфигурационные файлы в python)
- Python copy file (копирование файла в python)
- Python log file (логирование в файл в python)

Расширенные примеры переименования файлов

Пример 1: Переименование с заменой существующего файла

Использование os.replace() для атомарной замены (кроссплатформенно):

Пример
import os

# Создаём демонстрационные файлы
with open('source.txt', 'w') as f: f.write('source')
with open('target.txt', 'w') as f: f.write('target')

os.replace('source.txt', 'target.txt')
print('source.txt' in os.listdir('.'))  # False
print('target.txt' in os.listdir('.'))  # True

# Очистка
os.remove('target.txt')
False
True

Пример 2: Переименование с изменением расширения

Заменить расширение .html на .htm для всех файлов в папке:

Пример
import os
from pathlib import Path

folder = 'pages'
for path in Path(folder).glob('*.html'):
    new_name = path.stem + '.htm'
    new_path = path.with_name(new_name)
    path.rename(new_path)
    print(f'{path.name} -> {new_name}')
index.html -> index.htm
about.html -> about.htm

Пример 3: Переименование с добавлением даты в имя файла

Использование текущей даты для создания уникального имени:

Пример
from pathlib import Path
from datetime import datetime

file = Path('report.txt')
if file.exists():
    date_str = datetime.now().strftime('%Y%m%d_%H%M%S')
    new_name = f'{file.stem}_{date_str}{file.suffix}'
    file.rename(new_name)
    print(f'Переименован в {new_name}')
Переименован в report_20250309_153045.txt

Пример 4: Безопасное переименование с использованием временного файла

Если процесс может прерваться, для сохранения целостности данных создают временную копию:

Пример
import os
import tempfile

src = 'critical_data.bin'
tmp = tempfile.mktemp(dir=os.path.dirname(src))

try:
    # Сначала копируем во временный файл
    with open(src, 'rb') as f_in, open(tmp, 'wb') as f_out:
        f_out.write(f_in.read())
    # Затем заменяем оригинал
    os.replace(tmp, src)
    print('Файл безопасно переименован')
except Exception as e:
    # Если ошибка, удаляем временный файл
    if os.path.exists(tmp):
        os.remove(tmp)
    print(f'Ошибка: {e}')

Пример 5: Переименование файла с проверкой прав доступа (Linux/Mac)

Проверка, может ли текущий пользователь переименовать файл:

Пример
import os
import stat

path = 'restricted.txt'
try:
    st = os.stat(path)
    # Проверка, есть ли право на запись в родительской директории
    if os.access(os.path.dirname(path) or '.', os.W_OK):
        os.rename(path, 'renamed_restricted.txt')
        print('Успешно')
    else:
        print('Нет прав на переименование')
except FileNotFoundError:
    print('Файл не найден')
Нет прав на переименование

Переименование файла в Python - comments

En
Python rename file (python)