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

问题描述 投票:1回答:2

我正在测试一个想法,将扩展名为'.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个文件,所以我知道这里有些东西,但我不知道问题是什么。任何有关这方面的帮助将不胜感激。

谢谢!

python python-3.x
2个回答
1
投票

您应该使用文件名加入文件的路径,而不是使用文件名加入起始路径。

更改:

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

至:

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

1
投票

这应该将所有.yaml文件从src文件夹及其子文件夹复制到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)

© www.soinside.com 2019 - 2024. All rights reserved.