перед событием shutil copy2

#regex #python-3.x #directory

#регулярное выражение #python-3.x #каталог

Вопрос:

Я хочу использовать свою собственную функцию copy2 при вызове shutil.copytree . Я буду использовать регулярное выражение для летнего времени для создания нового летнего времени (копировать и переименовывать). Я вижу заголовок функции для copy2 как shutil.copy2(src, dst, *, follow_symlinks=True) . Если бы я должен был создать следующее:

 def my_copy2(???):
    return copy2(src, newdst...)
 

Как должен выглядеть заголовок моей функции и что я буду вызывать copy2 ? Я не уверен, что происходит с аргументом empty * и символьной ссылкой, т. Е. Мне все равно?

Это работает, но не та же сигнатура функции, что и copy2:

 #!/usr/bin/python

import shutil

def copy_and_rename(src,dst) :
    return shutil.copy2(src, dst.replace("pdf","zzz"))

SRC_DIR="srcjunk"
DEST_DIR="destjunk"
shutil.copytree(SRC_DIR, DEST_DIR, copy_function=copy_and_rename)
 

Ответ №1:

Вы можете импортировать модуль внутри функции или сделать это в скрипте. Документация не объясняет, что это * такое. Я бы опустил его.

 from shutil import copy2
def my_copy2(src, newdst, ...)
    return copy2(src, newdst, ...)
 

Или с импортом внутри (также вы могли бы просто сделать import shutil , а затем импортировать с shutil.copy2 помощью):

 def my_copy2(src, newdst, ...)
    from shutil import copy2
    return copy2(src, newdst, ...)
 

Вы должны указать достаточное количество параметров для своей функции, которая copy2 может выполняться.
Использование регулярных выражений означает, что перед использованием строки вы можете подготовить ее, добавив суффикс или добавив путь, где вы хотите ее сохранить. Это может быть сделано как внутри вашей функции, так и снаружи.

Комментарии:

1. Программа не выдала ошибок с def my_copy2(src, newdst). Что такое «…»? И что вообще означает пустая звездочка? Я получаю недопустимый синтаксис с «…»

2. … есть другие аргументы, которые вам нужны для copy2 или для обработки регулярных выражений. О звездочке я не знаю значения…

3. Я получаю недопустимый синтаксис с «…»

4. Попробуйте прочитать это руководство . Вы должны заменить ... на аргументы. Также, если у вас есть ошибка в вашем коде, было бы лучше, если бы вы вставили ошибку в свой вопрос.

5. def my_copy2(src,dst, …) : ошибка синтаксиса: недопустимый синтаксис (массив указывает на многоточия)