当前位置: 代码迷 >> python >> 尝试将具有特定扩展名的文件从源文件夹复制到目标文件夹
  详细解决方案

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

热度:62   发布时间:2023-06-19 09:31:36.0

我正在测试将所有扩展名为“.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 个文件,所以我知道这里出了点问题,但我不太清楚问题是什么。

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

改变:

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

到:

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

这应该将 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)

  相关解决方案