我正在扫描文件夹及其子文件夹,以查找具有如下特定格式的文件:
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)
shutil.copy('/mnt/data/perfil_profissional_instagram.png', '/mnt/data/perfil_profissional_instagram_shared.png')