Я тестирую идею скопировать все файлы с расширением «.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
ASH 18 Сен 2018 в 06:04

2 ответа

Лучший ответ

Вы должны объединить путь к файлу с именем файла вместо того, чтобы объединять начальный путь с именем файла.

Изменить:

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

Чтобы :

full_file_name = os.path.join(root, filename)
1
blhsing 18 Сен 2018 в 03:12

Это должно скопировать все файлы .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)

1
katamit 18 Сен 2018 в 08:26