Как переименовать файл в 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). Проверяйте имена перед переименованием.
Расширенные примеры переименования файлов
Пример 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('Файл не найден')
Нет прав на переименование