Как перемещать файлы между директориями с использованием `shutil.move()`?

Используйте `shutil.move(source, destination)`.
`source` - путь к перемещаемому файлу.
`destination` - путь к целевой директории или новому имени файла.
Пример: `shutil.move('/path/to/source/file.txt', '/path/to/destination/')` переместит файл `file.txt` в директорию `destination`. Если `destination` указывает на существующий файл, он будет перезаписан.

Для перемещения файлов между директориями в 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.
0