如何检查路径是否存在并使用 python 复制文件夹和文件
how to check if path exist and copy folders and files using python
我有一个 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()
你为什么还要检查?只需 rmtree 目的地并忽略错误(如果它不存在)。第一次检查并不会节省很多钱,只会让代码变得更复杂。
为什么要删除要复制的每个文件夹的 src?在循环之前删除一次
您还应该将 src 的子文件夹复制到 dst 的子文件夹中,而不是将所有内容转储到 src
os.walk 将递归遍历根目录下的所有目录(以及它们的目录,以及它们的...),这似乎并不是您想要的这里,
你的路径管理很奇怪,为什么你有两个不同的源和三个目标使用完全不一致?
我有一个 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()
你为什么还要检查?只需 rmtree 目的地并忽略错误(如果它不存在)。第一次检查并不会节省很多钱,只会让代码变得更复杂。
为什么要删除要复制的每个文件夹的 src?在循环之前删除一次
您还应该将 src 的子文件夹复制到 dst 的子文件夹中,而不是将所有内容转储到 src
os.walk 将递归遍历根目录下的所有目录(以及它们的目录,以及它们的...),这似乎并不是您想要的这里,
你的路径管理很奇怪,为什么你有两个不同的源和三个目标使用完全不一致?