复制具有指定扩展名的文件并保留文件夹树结构
Copying files with specified extensions with preserving a folder tree structure
我已经(在互联网的巨大帮助下)编写了一个脚本,旨在将具有指定扩展名的文件从目标文件夹(和所有子文件夹)复制到新文件夹。
我已经部分完成了,但我遇到了问题。
我的脚本正在按预期复制文件,但只是将它们粘贴到作为目标指定的文件夹,而不保留文件夹树结构。
我的函数这样做:
def copy_files_spec_ext(ext, file_path, root_path, dest_path):
ext_counter=0
ext="."+ext;
for root_path, dnames, fnames in os.walk(root_path):
for crt_file in fnames:
if crt_file.endswith(ext):
source_file_path = os.path.join(root_path, crt_file)
dest_file_path = os.path.join(dest_path, crt_file)
shutil.copyfile(source_file_path, dest_file_path)
ext_counter=ext_counter+1;
return ext_counter;
该代码是我发现的代码的修改 here
我是 python 的新手(几个月的非密集编码),所以请怜悯 ;-)。
在此先感谢您的帮助。
PS。抱歉英语不好。
您忘记在目标中添加源的目录路径:
source_file_path = os.path.join(root_path, crt_file)
dest_file_path = os.path.join(dest_path, root_path ,crt_file)
好的,所以我再次阅读了这段代码,显然我发现了我做错了什么。
我创建了另一个变量,它存储提供给函数的源路径与找到文件的路径之间的差异,并将此差异添加到目标路径。
现在代码如下所示:
def copy_files_spec_ext(ext, file_path, root_path, dest_path):
ext_counter=0
ext="."+ext;
static_root_path=root_path;
for root_path, dnames, fnames in os.walk(root_path):
for crt_file in fnames:
if crt_file.endswith(ext):
source_file_path = os.path.join(root_path, crt_file)
additional_folders=os.path.relpath(root_path, static_root_path);
dest_file_path = os.path.join(dest_path, additional_folders, crt_file)
shutil.copyfile(source_file_path, dest_file_path)
ext_counter=ext_counter+1;
return ext_counter;
我已经(在互联网的巨大帮助下)编写了一个脚本,旨在将具有指定扩展名的文件从目标文件夹(和所有子文件夹)复制到新文件夹。
我已经部分完成了,但我遇到了问题。
我的脚本正在按预期复制文件,但只是将它们粘贴到作为目标指定的文件夹,而不保留文件夹树结构。
我的函数这样做:
def copy_files_spec_ext(ext, file_path, root_path, dest_path):
ext_counter=0
ext="."+ext;
for root_path, dnames, fnames in os.walk(root_path):
for crt_file in fnames:
if crt_file.endswith(ext):
source_file_path = os.path.join(root_path, crt_file)
dest_file_path = os.path.join(dest_path, crt_file)
shutil.copyfile(source_file_path, dest_file_path)
ext_counter=ext_counter+1;
return ext_counter;
该代码是我发现的代码的修改 here
我是 python 的新手(几个月的非密集编码),所以请怜悯 ;-)。 在此先感谢您的帮助。
PS。抱歉英语不好。
您忘记在目标中添加源的目录路径:
source_file_path = os.path.join(root_path, crt_file)
dest_file_path = os.path.join(dest_path, root_path ,crt_file)
好的,所以我再次阅读了这段代码,显然我发现了我做错了什么。 我创建了另一个变量,它存储提供给函数的源路径与找到文件的路径之间的差异,并将此差异添加到目标路径。
现在代码如下所示:
def copy_files_spec_ext(ext, file_path, root_path, dest_path):
ext_counter=0
ext="."+ext;
static_root_path=root_path;
for root_path, dnames, fnames in os.walk(root_path):
for crt_file in fnames:
if crt_file.endswith(ext):
source_file_path = os.path.join(root_path, crt_file)
additional_folders=os.path.relpath(root_path, static_root_path);
dest_file_path = os.path.join(dest_path, additional_folders, crt_file)
shutil.copyfile(source_file_path, dest_file_path)
ext_counter=ext_counter+1;
return ext_counter;