Для перемещения файлов между директориями в Python используется функция shutil.move()
из модуля shutil
. Она позволяет перенести файл или директорию из одного места в другое в файловой системе.
Синтаксис:
shutil.move(source, destination, copy_function=copy2)
Параметры:
source
: Путь к файлу или директории, которую нужно переместить. Может быть относительным или абсолютным.destination
: Путь к целевой директории или новому файлу. Может быть относительным или абсолютным.
destination
указывает на существующую директорию, то файл или директория source
перемещается внутрь этой директории, сохраняя своё имя.destination
указывает на несуществующую директорию, будет предпринята попытка переименовать source
в destination
. Это может привести к ошибке, если не хватает прав доступа.destination
указывает на несуществующий файл (с тем же именем, которое мы хотим дать), то source
будет переименован и перемещен.copy_function
(необязательный): Функция, используемая для копирования файла, если перемещение невозможно (например, если source
и destination
находятся на разных файловых системах). По умолчанию используется shutil.copy2
, которая пытается сохранить метаданные файла. Другие варианты: shutil.copy
(копирует только содержимое) или можно передать свою функцию копирования.Примеры:
1. Перемещение файла в другую директорию:
import shutil
import os
# Создадим тестовый файл
if not os.path.exists("source_directory"):
os.makedirs("source_directory")
with open("source_directory/my_file.txt", "w") as f:
f.write("Hello, world!")
# Создадим целевую директорию
if not os.path.exists("destination_directory"):
os.makedirs("destination_directory")
source = "source_directory/my_file.txt"
destination = "destination_directory"
shutil.move(source, destination)
print(f"Файл перемещен из {source} в {destination}")
2. Перемещение файла и переименование его:
import shutil
import os
# Создадим тестовый файл
if not os.path.exists("source_directory"):
os.makedirs("source_directory")
with open("source_directory/old_name.txt", "w") as f:
f.write("Hello, world!")
source = "source_directory/old_name.txt"
destination = "source_directory/new_name.txt" #Переименуем и переместим в ту же директорию
shutil.move(source, destination)
print(f"Файл перемещен и переименован из {source} в {destination}")
3. Перемещение директории:
import shutil
import os
# Создадим тестовую директорию со всем содержимым.
if not os.path.exists("source_directory"):
os.makedirs("source_directory")
with open("source_directory/file1.txt", "w") as f:
f.write("Content of file1")
os.makedirs("source_directory/nested_directory")
with open("source_directory/nested_directory/file2.txt", "w") as f:
f.write("Content of file2")
# Создадим целевую директорию
if not os.path.exists("destination_directory"):
os.makedirs("destination_directory")
source = "source_directory"
destination = "destination_directory"
shutil.move(source, destination)
print(f"Директория перемещена из {source} в {destination}")
Обратите внимание:
shutil.move()
удаляет source
после успешного перемещения.shutil.Error
или его подкласс (например, OSError
). Рекомендуется обрабатывать исключения, чтобы обеспечить надежную работу программы.source
и destination
находятся на разных файловых системах, shutil.move()
сначала скопирует файл, а затем удалит оригинал. Можно указать функцию копирования через аргумент copy_function
.