尝试将具有特定扩展名的文件从源文件夹复制到目标文件夹

时间:2018-09-18 03:04:51

标签: python python-3.x

我正在测试一种将扩展名为'.yaml'的所有文件从一个文件夹(以及所有子文件夹)复制到另一个文件夹的想法。我想出了下面的代码。

import os
import shutil

src = 'C:\\Users\\ryans\\OneDrive\\Documents\\GitHub\\Pipeline\\'
dest = 'C:\\Users\\ryans\\OneDrive\\Desktop\\AllYAML\\'

#src_files = os.listdir(src)

for root, dirs, files in os.walk(src):  
    for filename in files:
        full_file_name = os.path.join(src, filename)
        if (os.path.isfile(full_file_name)):
            if full_file_name.endswith('.yaml'):
                shutil.copy(full_file_name, dest)

在大多数情况下,这似乎是正确的,但是它只是将两个扩展名为“ .yaml”的文件从源复制到目标。所有文件夹和子文件夹中都有大约130个文件,因此我知道这里不对,但我不十分清楚问题出在哪里。任何帮助,将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

您应将文件路径与文件名连接起来,而不是将起始路径与文件名连接起来。

更改:

full_file_name = os.path.join(src, filename)

收件人:

full_file_name = os.path.join(root, filename)

答案 1 :(得分:1)

这应该将src文件夹及其子文件夹中的所有.yaml文件复制到dest文件夹中,请记住,src子文件夹结构将不会保留在dest中。

import os
import shutil

src = 'C:\\Users\\ryans\\OneDrive\\Documents\\GitHub\\Pipeline\\'
dest = 'C:\\Users\\ryans\\OneDrive\\Desktop\\AllYAML\\'

#src_files = os.listdir(src)

for root, dirs, files in os.walk(src):
    for filename in files:
        full_file_name = os.path.join(root, filename)
        if (os.path.isfile(full_file_name)):
            if full_file_name.endswith('.yaml'):
                shutil.copy(full_file_name, dest)

主要是文件名要与它所属的目录合并,例如 full_file_name = os.path.join(root,filename)