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

Как создать 30 новых папок, в каждой из которых будут содержаться по 6 фотографий, взятых по одной из каждой из 6 исходных папок, в порядке очередности?
  • 7 января 2024 г. 10:19
Ответы на вопрос 2
Перенос файлов между папками в Python можно реализовать с помощью модулей `os` и `shutil`. Для начала продемонстрирую, как перенести один файл.

```python
import shutil

# Путь к исходному файлу
source_path = '/path/to/source/file.txt'

# Путь к целевой папке
destination_path = '/path/to/destination/file.txt'

# Перемещение файла
shutil.move(source_path, destination_path)
```

Теперь по поводу создания папок и перемещения фотографий. Вам нужно будет создать код, который сделает следующее:

1. Создает 30 новых папок.
2. Перемещает по одной фотографии из каждой из 6 исходных папок в каждую из созданных папок. Одна фотография взята в порядке очередности.

Пример такого скрипта:

```python
import os
import shutil

# Пути к исходным папкам
source_folders = ['/path/to/source/folder1', '/path/to/source/folder2', '/path/to/source/folder3',
                  '/path/to/source/folder4', '/path/to/source/folder5', '/path/to/source/folder6']

# Пути к папке, куда будут создаваться новые папки
base_destination = '/path/to/destination/folders'

# Создаем 30 новых папок
for i in range(1, 31):
    current_folder = os.path.join(base_destination, f'folder_{i:02d}')
    os.makedirs(current_folder, exist_ok=True)
    
    # Идем по 6 исходным папкам
    for folder in source_folders:
        # Получаем список файлов в каждой исходной папке
        files = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f))]
        files.sort() # Сортируем, чтобы порядок был детерминированным
        
        # Проверяем, есть ли файлы для перемещения
        if files:
            # Возьмем первый файл, чтобы переместить
            file_to_move = files[0]
            
            # Путь к исходному файлу
            source_file_path = os.path.join(folder, file_to_move)
            
            # Путь к новому файлу в текущей созданной папке
            destination_file_path = os.path.join(current_folder, file_to_move)
            
            # Перемещаем файл
            shutil.move(source_file_path, destination_file_path)
```

Важно, что в этом коде файлы в исходных папках перемещаются (то есть удаляются из исходных папок). После выполнения этого кода в каждой из созданных 30 папок будет по 6 фотографий, взятых из 6 разных исходных папок. Важно также убедиться, что в каждой исходной папке достаточно изображений, чтобы распределить по новым папкам.

Обратите внимание, что `os.makedirs(current_folder, exist_ok=True)` создаст новую папку, если она еще не существует, и не вызовет ошибку, если такая папка уже есть. Также параметр `exist_ok=True` позволяет избежать исключения, если папка уже существует. В этом примере я предполагаю, что фотографии расположены прямо в исходных папках и не требуют рекурсивного поиска в подпапках.
В целом довольно просто. 
1. Создать новые директории с помощью os.mkdir
2. Получить названия файлов в директории с помощью os.listdir
3. Переместить файл из старой директории в новую shutil.move
и так циклом по всем файлам нужных директорий
Похожие вопросы