как проверить наличие пути и скопировать папки и файлы, используя python - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть сценарий python, который должен сначала проверить, существует ли папка в заданном пути, затем, если существует, удалить существующий, а затем скопировать новый из источника. если не существует, просто скопируйте новую папку.

проблема в том, что в исходном пути, если у меня есть папка, система проверит, существует ли папка в месте назначения, и удалит и скопирует, если она существует.

я хочу просто проверить одно имя папки "test", а затем, если она не существует, скопировать новую папку, если она существует, удалить и скопировать.

код:

import os
import shutil
from os import path
import datetime


src = "I:/"
src2 = "I:/test"

dst = "C:/Users/LT GM/Desktop/test/"
dst2 = "C:/Users/LT GM/Documents/"
dst3 = "C:/Users/LT GM/Documents/Visual Studio 2017"

def main():
    copy()

def copy():
    #go through  the src files and folders 
    for root,dirs,files in os.walk(src):
        try:
            for folder in dirs:
                #return folder name
                full_folder_name = os.path.join(src, folder)
                print("folder : ",full_folder_name)
                #check if folder exits
                if os.path.exists(dst):
                    print("folder exist")
                    #delete folder
                    shutil.rmtree(dst)
                    print("the deleted folder is :{0}".format(dst))
                    #copy the folder as it is (folder with the files)
                    copieddst = shutil.copytree(src2,dst)
                    print("copy of the folder is done :{0}".format(copieddst))
                else:
                    print("folder does Not Exist")
                    #copy the folder as it is (folder with the files)
                    copieddst = shutil.copytree(src2,dst)
                    print("copy of the folder  is done :{0}".format(copieddst))
        except Exception as e:
            print(e)

        try:
            for name in files:
                full_file_name = os.path.join(src, name)
                print("files: ",full_file_name)
                #check for pdf extension
                if name.endswith("pdf"):
                    #copy files
                    shutil.copy(full_file_name, dst2)

                    #check for doc & docx extension 
                elif name.endswith("docx") or name.endswith("doc"):
                    #copy files
                    shutil.copy(full_file_name, dst3)
            print("word files done")
            print("pdf files done")
        except Exception as e:
            print(e)
if __name__=="__main__":
    main()

1 Ответ

0 голосов
/ 04 февраля 2020
  1. почему вы вообще проверяете? Просто вызовите дерево назначения и проигнорируйте ошибку, если она не существует. Вы не получаете значительной экономии при первой проверке, вы просто усложняете свой код.

  2. почему вы удаляете sr c для каждой папки, которую вы копируете? Просто удалите его один раз до l oop

  3. , также вам, вероятно, следует скопировать подпапки sr c в подпапки dst, а не в дамп всего в sr c

  4. os.walk будет рекурсивно проходить через все каталоги в root (и, следовательно, их каталоги, и их, ...), которые действительно кажется, здесь не то, что вам нужно,

  5. ваше управление путями странно, как черт, почему у вас два разных источника и три пункта назначения используются совершенно непоследовательно?

...