Как скопировать файлы с помощью shutil.copy? - PullRequest
0 голосов
/ 02 июля 2019

Я сканирую папку и ее подпапки на наличие файлов определенного формата, например: saving_0.0000000.gz.Есть папки, содержащие сотни этих файлов, и я хочу извлечь файл с наибольшим числовым значением в его имени.Например, если в папке у меня есть saving_0.0000000.gz, saving_100.00000.gz и saving_250.00000.gz, я хочу, чтобы программа копировала только файл saving_250.00000.gz.

Кажется, что написанная мной программа правильно работает с родительским файломпапку (с os.walk), и он находит правильные файлы (я проверял с помощью отладчика).Поэтому я сохраняю имя интересующего меня файла (т.е. saving_123456.78.gz) в переменной fichier, но когда я запускаю программу, она копирует гораздо больше файлов, чем мне нужно.Я попытался переместить shutil.copy из последнего цикла for (чтобы он не копировал каждый файл), но я получаю сообщение об ошибке:

FileNotFoundError: [Errno 2] No such file or directory: '/path/to/saving_0.0000000.gz'
#! /usr/bin/python3.4

import re, os, shutil, gzip

sauvegarde = '/mnt/desto/Sauvegardes_archivees'
dossier = '/mnt/desto/EPS2_900_V5/'
matrices = ['subfolder_1', 'subfolder_2', 'subfolder_3']

for mat in matrices:
    for folders, subfolders, files in os.walk(dossier + mat):
        fichier = 'saving_0.0000000.gz'
        for file in files:
            f = fichier.split('_')[1].split('.')[0]
            if not file.startswith('saving_') or not file.endswith('.gz') or not len(file) == 19:
                continue
            hgz_sauv = file.split('_')[1]
            h_sauv = hgz_sauv.split('.')[0]
            if len(h_sauv) >= len(f) and int(h_sauv) >= int(f):
                fichier = file
            shutil.copy(os.path.join(dossier,mat,folders,fichier),sauvegarde)
...