Python 3.7 в Windows: не могу скопировать специальные файлы с copytree и получить ERRNO2 - PullRequest
0 голосов
/ 30 октября 2019

В настоящее время я пишу скрипт на Python 3.7 для Windows, чтобы рекурсивно копировать файлы / каталоги из A в B и после копирования удалить все скопированные файлы в A.

Моя функция копирования:

def copytree(src, dst, symlinks=False, ignore=None):

for item in os.listdir(src):
    s = os.path.join(src, item)
    d = os.path.join(dst, item)
    if os.path.exists(d):
        logging.info("%s already exists" %item)
        continue
    if os.path.isdir(s):
        try:
            shutil.copytree(s, d, symlinks, ignore=log_directory_copy, copy_function=copy2_verbose)
            logging.info("Dir %s copied succesfully to %s " %(item, dst))
        except OSError as e:
            logging.error("Error while copying %s. %s" %(item,e))
            error_occured = True    
    else:
        copy2_verbose(s,d)

Мои copy2_verbose и log_directory_copy для регистрации файла для копирования и изменения каталога:

def copy2_verbose(src, dst):
global error_occured
if os.path.exists(dst):
    logging.info("%s already exists" %os.path.basename(src))
    return

try:
    logging.debug('Copy {0}'.format(os.path.basename(src)))
    shutil.copy2(src,dst)
except OSError as e:
    logging.error('Error while copying %s . %s' %(os.path.basename(src),e)) # Here I get the ERRORNO2
    error_occured = True    

def log_directory_copy(path, names):
logging.info('Change to %s' % path)
return []

При запуске следующего фрагмента кода я всегда получаюERRORNO2 только для некоторых определенных файлов в подкаталоге. Другие файлы в том же каталоге были скопированы без проблем. Всегда эти 7 файлов. Копирование других файлов из других каталогов и файлов из того же каталога работает отлично.

#more code
for entry in os.scandir(source_path): 
                            if entry.is_dir() and entry.name == rev_version:            
                                make_and_change_dirs(backUpSourceRevisionPath, sourceRevisionPath)
                                copytree(sourceRevisionPath,backUpSourceRevisionPath)
                                removeFileOrDir(sourceRevisionPath)
                                break 

Например, я получил следующую ошибку:

[Errno 2] Нет такого файла или каталога: '\\ путь \ Имя пользователя \ SW \ VideoLAN \ VLCMediaPlayer_2.2.4.0_C-x64_DE_ALL \ Source \ 01 \ Packages \ Prog64 \ VideoLAN \ VLC \ Lua \ HTTP \ CSS \ щ-воздушность \ Images \ щ-bg_highlight-soft_75_ffe45c_1x100.png '

6 из 7 файлов, которые я не могу скопировать, находятся в этом каталоге, но в этом каталоге есть и другие файлы, которые я могу скопировать без проблем.

Во время отладки я проверил источник ипеременная назначения для файлов, и это правильно, тем не менее я получаю ошибку.

Я очень смущен. Когда я хочу удалить эти файлы, такой ошибки нет, и она отлично работает. Ссылка на файл, конечно, та же самая.

...