копирование файлов в python

мне нужно скопировать все файлы у которых в названии есть буква "f" со всей системы в отдельную папку есть начало кода с выводом полных ссылок. помогите мне с написанием второй части кода для копирования этих фалов в одну папку. учитывая что у меня сотни текстовых файлов

import os
import glob
import shutil

for filename in glob.iglob('../**/*f*', recursive=True):
    if os.path.isfile(os.path.abspath(filename)) and filename.endswith('.txt'):
        print(os.path.abspath(filename))

if len(filename) == 0:
    print("nothing")
else:
    save_dir = "C:\python\TXT"
    if not os.path.isdir(save_dir):
        res = os.mkdir(save_dir)
        if res == OSError:
            print("cant create directory")
shutil.copyfile()

      

Ответы (1 шт):

Автор решения: Alexey Leshchenko
import os
import glob
import shutil

# сюда будем сохранять все подходящие имена файлов
files_to_copy = []
for filename in glob.iglob('../**/*f*', recursive=True):
    if os.path.isfile(os.path.abspath(filename)) and filename.endswith('.txt'):
        print(os.path.abspath(filename))
        # сохраняем в списочек
        files_to_copy.append(filename)

if len(filename) == 0:
    print("nothing")
else:
    save_dir = "C:\python\TXT"
    if not os.path.isdir(save_dir):
        res = os.mkdir(save_dir)
        if res == OSError:
            print("cant create directory")
    # копируем файлы по списку
    for f in files_to_copy:
        shutil.copy(f, save_dir)

Но есть подозрение, что в вашем изначальном коде лучше вместо:

for filename in glob.iglob('../**/*f*', recursive=True):
    if os.path.isfile(os.path.abspath(filename)) and filename.endswith('.txt'):

писать

for filename in glob.iglob('../**/*f*.txt', recursive=True):
    if os.path.isfile(os.path.abspath(filename)):
→ Ссылка