我的问题:
*.h.我尝试过的:
我已经能够使用os库收集所有标题
for root, dirs, files in os.walk(r'D:\folder\build'):
for f in files:
if f.endswith('.h'):
print os.path.join(root, f)
Run Code Online (Sandbox Code Playgroud)
这正确打印:
D:\folder\build\a.h
D:\folder\build\b.h
D:\folder\build\subfolder\c.h
D:\folder\build\subfolder\d.h
Run Code Online (Sandbox Code Playgroud)
我被困在哪里:
使用完整文件路径列表,如何在维护子目录的同时将这些文件复制到另一个位置?在上面的例子中,我想要维护下面的目录结构\build\
例如,我希望副本创建以下内容:
D:\other\subfolder\build\a.h
D:\other\subfolder\build\b.h
D:\other\subfolder\build\subfolder\c.h
D:\other\subfolder\build\subfolder\d.h
Run Code Online (Sandbox Code Playgroud)
您可以将shutil.copytree与ignore callable一起使用来过滤要复制的文件.
"如果给出忽略,它必须是一个可调用的,它将接收copytree()访问的目录作为其参数,以及它的内容列表(...).可调用的必须返回一系列相对的目录和文件名到当前目录(即第二个参数中的项的子集);这些名称将在复制过程中被忽略"
所以对于你的具体情况,你可以写:
from os.path import join, isfile
from shutil import copytree
# ignore any files but files with '.h' extension
ignore_func = lambda d, files: [f for f in files if isfile(join(d, f)) and f[-2:] != '.h']
copytree(src_dir, dest_dir, ignore=ignore_func)
Run Code Online (Sandbox Code Playgroud)