通过递归函数将文件夹、子文件夹和文件从一个路径复制到 python 中的另一个路径
copy folder, subfolders and files from a path to another path in python via a recursive function
我想将一些文件夹和文件从一个路径复制到另一个路径。例如,我想将具有其他一些子文件夹和一些文件的文件夹(称为 folder1)复制到另一个文件夹(dst)。在我的程序中,首先,我想检查目标文件夹中是否有名为 folder1 的文件夹,如果没有,则创建一个名为 folder1 的文件夹,然后将 folder1 的内容复制到目标。此外,也许我们在目标路径中有 folder1,但有一些 folder1 的子文件夹在目标中不存在,我们必须为此使用递归函数。这是我为此目的的递归函数:
def CopyFol_Subfolders(src, src_folder, dst):
Dir = next(os.walk(src))[1]
sub_files = ""
sub_files = next(os.walk(src))[2]
if not os.path.exists(dst + "/" + src_folder):
os.makedirs(dst + "/" + src_folder)
shutil.copy2(src + "/" + src_folder, dst + "/" + src_folder)
elif os.path.exists(src + "/" + src_folder) and is_exist_file(src+"/"+src_folder,dst+"/"+src_folder,sub_files):
copy_files(sub_files, src+"/"+src_folder, dst+"/"+src_folder)
else:
subfolders = ""
subfolders = next(os.walk(src + "/" + src_folder+"/"))[1]
for folder in subfolders:
CopyFol_Subfolders(src + "/" + src_folder, folder, dst + "/" + src_folder)
copy_files
函数会将文件从 src +"/"+src_folder
复制到 dst+"/"+src_folder
我很困惑,这不起作用。我在 shutil.copy2
中遇到不同的错误,告诉我 x is not a file
或 x is a directory
。
请有人检查一下我的递归函数的逻辑,让我知道这是什么问题?
用os.path.isdir
代替os.path.exists
,保证只能是目录不能是文件。而且 os.path.join
比我们自己拼接路径字符串要好。
def CopyFol_Subfolders(src, dst):
for item in os.listdir(src):
s = os.path.join(src, item)
d = os.path.join(dst, item)
if os.path.isdir(s):
CopyFol_Subfolders(s, d)
else:
shutil.copy2(s, d)
我想将一些文件夹和文件从一个路径复制到另一个路径。例如,我想将具有其他一些子文件夹和一些文件的文件夹(称为 folder1)复制到另一个文件夹(dst)。在我的程序中,首先,我想检查目标文件夹中是否有名为 folder1 的文件夹,如果没有,则创建一个名为 folder1 的文件夹,然后将 folder1 的内容复制到目标。此外,也许我们在目标路径中有 folder1,但有一些 folder1 的子文件夹在目标中不存在,我们必须为此使用递归函数。这是我为此目的的递归函数:
def CopyFol_Subfolders(src, src_folder, dst):
Dir = next(os.walk(src))[1]
sub_files = ""
sub_files = next(os.walk(src))[2]
if not os.path.exists(dst + "/" + src_folder):
os.makedirs(dst + "/" + src_folder)
shutil.copy2(src + "/" + src_folder, dst + "/" + src_folder)
elif os.path.exists(src + "/" + src_folder) and is_exist_file(src+"/"+src_folder,dst+"/"+src_folder,sub_files):
copy_files(sub_files, src+"/"+src_folder, dst+"/"+src_folder)
else:
subfolders = ""
subfolders = next(os.walk(src + "/" + src_folder+"/"))[1]
for folder in subfolders:
CopyFol_Subfolders(src + "/" + src_folder, folder, dst + "/" + src_folder)
copy_files
函数会将文件从 src +"/"+src_folder
复制到 dst+"/"+src_folder
我很困惑,这不起作用。我在 shutil.copy2
中遇到不同的错误,告诉我 x is not a file
或 x is a directory
。
请有人检查一下我的递归函数的逻辑,让我知道这是什么问题?
用os.path.isdir
代替os.path.exists
,保证只能是目录不能是文件。而且 os.path.join
比我们自己拼接路径字符串要好。
def CopyFol_Subfolders(src, dst):
for item in os.listdir(src):
s = os.path.join(src, item)
d = os.path.join(dst, item)
if os.path.isdir(s):
CopyFol_Subfolders(s, d)
else:
shutil.copy2(s, d)