Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正在尝试将具有特定扩展名的文件从源文件夹复制到目标文件夹_Python_Python 3.x - Fatal编程技术网

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

Python 正在尝试将具有特定扩展名的文件从源文件夹复制到目标文件夹,python,python-3.x,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, d

我正在测试将扩展名为“.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)
致:


这将把src文件夹及其子文件夹中的所有.yaml文件复制到dest文件夹中,记住dest中不会维护src子文件夹结构

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\u file\u name=os.path.join(root,filename)

我刚刚意识到有些文件具有相同的名称,但它们位于不同的文件夹中。当它们都被复制/粘贴到一个文件夹中时,我得到的文件会更少,因为有些文件会被覆盖。如果有多个文件同名,有没有办法增加文件名,比如在末尾加上1,2,3?哦,我刚知道。最后两行如下:shutil.copy(完整的文件名,dest+str(i)+''.'+文件名)i+=1
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)