PatrikНе совсем понятно, что Вы имеете в виду под “шаблоном”
1 Если файл копируется в папку, то все в порядке. Но если его придется копировать под другим именем,
как сделать шаблон?
Patrik
выдает много дубликатов, и не понятно как сопоставить с dstpath.
PatrikСоздавая каталоги вручную, Вы усложняете логику программы. При копировании больших файлов, лишний вызов os.makedirs() значения иметь не будет. Посему, предлагаю поступить так:
3 Как сделать связку с :
file_list = [] for root, dirs, files in os.walk(SRC_PATH): for name in files: path = root[len(SRC_PATH):] file_list.append(os.path.join(path, name))
Потом Вы просто пробегаетесь по списку file_list и выполняете в цикле свой код копирования.
Каталоги создавать предлагаю, как и раньше - вот так (в том же цикле копирования):
file_dir = os.path.dirname(list_item) if not os.path.exists(file_dir): os.makedirs(file_dir)
Учитывая, что у Вас в алгоритме есть разветвление - копирование каталогов и копирование файлов - для файла поступайте точно таким же образом - создавайте на основе пути к файлу список, содержащий один элемент - относительный путь к результирующему файлу и передавайте всё это в цикл копирования.
Получается примерно такой алгоритм (псевдокод):
file_list = [] # Определяем каталог это или файл if os.path.isfile(SRC_PATH): file_list.append(os.path.basename(SRC_PATH)) # Из пути SRC_PATH берем только имя файла else: for a, b, c in os.walk(SRC_PATH): file_list.append(...) # Цикл копирования for item in file_list: source = os.path.join(os.path.dirname(SRC_PATH), item) # Вот здесь может глючить, если в SRC_PATH передавать путь к каталогу и не завершать его символом '/' target = os.path.join(os.path.dirname(DST_PATH), item) # Создаем каталоги file_dir = os.path.dirname(target) if not os.path.exists(file_dir): os.makedirs(file_dir) # Дальше идет сам код копирования ...