@Elbro

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

Интересует несложный вопрос, но никак не получается соединить вместе.

Суть такая, есть 100 папок с файлами под названиями от 1 до 100
Нужно создать 100 папок, в которых будут файлы 1(1), 1(2)...
2(1), 2(2) и т.д. Проще говоря, одинаковые названия скинуть в одну папку.

import os
import shutil
File = "100.png"

for root, dirs, files in os.walk('.'):
    for file in files: 
        if file == File:

            src_path = root + "/" + file
            print(src_path)
            dst_path = "some_folder/"
            shutil.copy(src_path, dst_path)

Но он не создает копию 1(1), а тупо выдает
shutil.SameFileError: './some_folder/#100.png' and 'some_folder/#100.png' are the same file
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Сразу скажу, я исхожу из того, что целевые каталоги находятся НЕ там же, где исходные. Иначе программа усложняется раз в пять.

Пишем алгоритм.
1. Для каждого каталога:
2. Для каждого файла в каталоге:
3. Определяем каталог, куда этот файл дожен быть перемещён.
4. Проверяем, есть ли в каталоге файл с таким именем.
5. Если есть, то добавляем к исходному имени суффикс (i). Увеличиваем i, пока не найдём незанятое имя.
6. Определив имя, переносим/копируем файл в целевой каталог.

Перенести это на питоне не будет сложно, модуль pathlib очень удобен для таких манипуляций. Максимум, написать небольшую функцию для реализации п. 5.

def find_unused_name(dir: pathlib.Path, basename: str) -> str:
    ...  # тут реализуем пункт 5, и возвращаем имя с правильным суффиксом.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы