2017-03-28 4 views
1

Ma question est étroitement liée à Python identify file with largest number as part of filenameRechercher un fichier dans le répertoire avec le plus grand nombre dans le nom du fichier

Je veux ajouter des fichiers à un répertoire. Le nom des fichiers sont: fichier1, fichier2 ...... fichier^n. Cela fonctionne si je le fais en une fois, mais quand je veux ajouter des fichiers, et que je veux trouver le dernier fichier ajouté (dans ce cas, le fichier avec le plus grand nombre), il reconnaît 'file6' supérieur à 'file100 '.

Comment puis-je résoudre ce problème.

import glob 
import os 

latest_file = max(sorted(list_of_files, key=os.path.getctime)) 
print latest_file 

Comme vous pouvez le voir, j'essayé de regarder le temps créé et j'ai essayé aussi regarder le temps modifié, mais ceux-ci peuvent être les mêmes si cela ne suffit pas.

EDIT mes noms de fichiers ont l'extension « txt » après le numéro

Répondre

4

Je vais essayer de le résoudre en utilisant uniquement les noms de fichiers, pas de dates.

Vous devez convertir à l'entier avant appling critères ou Alphanum genre applique au nom du fichier tout

Preuve du concept:

import re 
list_of_files = ["file1","file100","file4","file7"] 

def extract_number(f): 
    s = re.findall("\d+$",f) 
    return (int(s[0]) if s else -1,f) 

print(max(list_of_files,key=extract_number)) 

Résultat: file100

  • la fonction clé extrait la chiffres trouvés à la fin du fichier et convertis en entier, et si rien n'est trouvé, retourne -1
  • vous n'avez pas besoin de sort pour trouver le maximum, juste passer la clé de max directement
  • si 2 fichiers ont le même index, utilisez le nom de fichier complet en cas d'égalité (ce qui explique la clé tuple)
+0

Peut-être plus facile de supprimer simplement les quatre premiers caractères, si nous supposons que l'entrée est bien formée. – SwiftsNamesake

+0

Je suis désolé, mes noms de fichiers ont l'extension à la fin ". Txt". À cause de cela votre code ne fonctionne pas, c'était une erreur de ma part. Comment puis-je ajuster l'expression rationnelle pour l'ignorer? –

+1

's = re.findall (" (\ d +). Txt ", f)' pour l'extension de fichier .txt – dirkgroten

1

en utilisant l'expression régulière suivante vous pouvez obtenir le nombre de chaque fichier:

import re 

for file in list_of_files: 
    num = int(re.search('file(\d*)', file).group(1)) # assuming filename is "filexxx.txt" 
    # compare num to previous max, e.g. 
    max = num if num > max else max # set max = 0 before for-loop 

A la fin de la boucle, max sera votre plus grand nombre de noms de fichiers.