Comment obtenir le dernier fichier dans un dossier à l'aide de python
J'ai besoin d'obtenir le dernier fichier d'un dossier à l'aide de python. Tout en utilisant le code:
max(files, key = os.path.getctime)
J'obtiens l'erreur ci-dessous:
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'a'
- De fichier qui sont que vous essayez de trouver? ajouter votre code correspondant à la quesiton.
- Je devine pourquoi il pourrait ne pas fonctionner pour vous: est-ce "fichiers", une liste de nom de fichier des éléments ou un seul nom de fichier de la chaîne?
Vous devez vous connecter pour publier un commentaire.
Tout ce qui est attribué à la
files
variable est incorrect. Utilisez le code suivant.if os.path.isdir(latest_file):
latest_file
variable peut contenir à la fois des répertoires ou des fichiers. Donc, si vous voulez vérifier la dernière modification est un dossier, vous pouvez ajouter le dessus si l'état à la fin du script. de sorte que vous pouvez l'ignorer si son d'un fichier et écrire la logique à l'intérieur deif
à exécuter si c'est un dossier.pathlib.Path
objets plus que des chaînes et des os.chemin d'accès. Avec pathlib.Des objets de chemin de votre réponse devient:list_of_paths = folder_path.glob('*'); latest_path = max(list_of_paths, key=lambda p: p.stat().st_ctime)
glob.iglob()
au lieu de laglob.glob()
, commeglob.iglob()
retourne un itérateur qui donne les mêmes valeurs queglob()
sans avoir à les stocker simultanément. Ce qui signifieglob.iglob()
sera plus efficace. Découvrez ci-dessous la réponse : lienglob.iglob()
sera plus efficace, Veuillez vérifier répondre à stackoverflow.com/a/50605125/7918560os.path.getctime
comme clé, même avecPath
objets.glob.iglob()
est la meilleure solution stackoverflow.com/a/50605125/7918560est assez incomplet code. Qu'est-ce que
files
? C'est probablement une liste de noms de fichiers, à l'issue deos.listdir()
.Mais cette liste répertorie uniquement les parties du nom du fichier (un. k. un. "basenames"), parce que leur chemin est commun. Pour l'utiliser correctement, vous devez le combiner avec le chemin qui mène à elle (et utilisée pour l'obtenir).
Par exemple (non testé):
if basename.endswith('.csv')
dans la compréhension de liste.glob.iglob()
sera plus efficace et mieux, s'il vous Plaît vérifier répondre à stackoverflow.com/a/50605125/7918560Essayer de trier les éléments par temps de création. L'exemple ci-dessous trie les fichiers dans un dossier et obtient un premier élément qui est le dernier.
Je conseille
glob.iglob()
au lieu de laglob.glob()
, car il est plus efficace.Qui signifie
glob.iglob()
sera plus efficace.J'ai surtout l'utilisation de code ci-dessous pour trouver les derniers fichier correspondant à mon modèle:
LatestFile = max(glob.iglob(fileNamePattern),key=os.path.getctime)
NOTE:
Il existe des variantes de
max
fonction, En cas de trouver le fichier le plus récent, nous utiliserons ci-dessous variante:max(iterable, *[, key, default])
qui doit itérable votre premier paramètre doit être itératif.
En cas de constat max de nums nous pouvons utiliser beow variante :
max (num1, num2, num3, *args[, key])
(Édité afin d'améliorer la réponse)
D'abord définir une fonction get_latest_file
Vous pouvez également utiliser une docstring !
Si vous utilisez Python 3, vous pouvez utiliser iglob à la place.
Code complet pour renvoyer le nom du dernier fichier:
JuniperAccessLog-standalone-FCL_VPN
partie de?J'ai essayé d'utiliser les suggestions ci-dessus et mon programme s'est planté, que j'ai trouvé le fichier que je suis en train d'essayer d'identifier qui a été utilisé et lors de l'utilisation de 'os.chemin d'accès.getctime' il s'est écrasé.
ce qui a finalement fonctionné pour moi a été:
ce codes obtient la rare d'objet entre les deux ensembles de listes de fichiers
ce n'est pas la plus élégante, et si plusieurs fichiers sont créés dans le même temps, il ne sera probablement pas stable
Est beaucoup plus rapide sous windows (0,05 s), appel d'une chauve-souris de script qui fait cela:
get_latest.chauve-souris
où
\\directory\in\question
est le répertoire que vous souhaitez étudier.get_latest.py
si il trouve un fichier
stdout
est le chemin d'accès etstderr
est Aucun.Utilisation
stdout.decode("utf-8").rstrip()
pour obtenir le seuil de représentation de chaîne de caractères du nom de fichier.