Glob recherche de fichiers dans l'ordre de date?
J'ai cette ligne de code dans mon script python. Il recherche tous les fichiers dans un répertoire particulier pour * cycle *.journal.
for searchedfile in glob.glob("*cycle*.log"):
Cela fonctionne parfaitement, cependant quand je lance mon script à un emplacement réseau, il ne recherche pas dans l'ordre et la place des recherches au hasard.
Est-il un moyen pour forcer le code pour effectuer une recherche par date de commande?
Cette question a été posée pour le php, mais je ne suis pas sûr de la différence.
Grâce
connexes: Trier les fichiers par date
connexes: Comment obtenez-vous une liste d'annuaires classés par date de création en python?
connexes: Comment obtenir la création d'un fichier & modification de la date/de temps en Python?
Code Final:
connexes: Comment obtenez-vous une liste d'annuaires classés par date de création en python?
connexes: Comment obtenir la création d'un fichier & modification de la date/de temps en Python?
Code Final:
searchedfiles = glob.glob("*cycle*.log")
searchedfiles.sort(key=os.path.getmtime)
for searchedfile in searchedfiles:
OriginalL'auteur Jason Rogers | 2014-05-02
Vous devez vous connecter pour publier un commentaire.
Pour trier les fichiers par date:
Voir aussi Tri COMMENT.
J'ai ajouté le lien vers les docs
Simplicité et élégance. Merci pour cela.
OriginalL'auteur jfs
Bien. La réponse est non.
glob
utiliseos.listdir
qui est décrit par:"Retourne une liste contenant les noms des entrées dans le répertoire donné par le chemin. La liste est dans un ordre arbitraire. Il n'inclut pas les entrées spéciales '.' et'..', même si ils sont présents dans le répertoire."
Si vous êtes réellement de la chance que vous avez fait le tri. Vous avez besoin de faire le tri vous-même.
Cela fonctionne pour moi:
Notez également qu'il utilise les temps de création, si vous voulez de modification de l'utilisation du temps, la fonction utilisée doit être
getmtime
.OriginalL'auteur luk32
À l'aide de glob pas. Maintenant que vous l'utilisez, glob est de stocker tous les fichiers à la fois dans le code et n'a pas de méthodes pour l'organisation de ces fichiers. Si seulement le résultat final est important, vous pouvez utiliser une deuxième boucle qui vérifie que la date du fichier et de la villégiature sur cette base. Si l'analyse de l'ordre des questions, glob est probablement pas la meilleure façon de le faire.
Le glob.glob() le code est le chargement de l'ensemble du répertoire de l'ensemble de fichiers dans une sorte de structure de données. Je l'ai dit code, parce que je ne sais pas si ils sont à l'aide d'une liste ou d'une internalisation de l'ensemble.
Il n'est pas encore le code. Aussi, il n'a pas d'importance. Le problème, c'est qu'elle est dans un ordre arbitraire, car il obtient directement à partir du système. Il dépend de la mise en œuvre du noyau et du système de fichiers de pilote.
OriginalL'auteur Dylan Lawrence
Vous pouvez trier la liste des fichiers qui reviennent à l'aide de
os.path.getmtime
ouos.path.getctime
. Voir cette autre DONC réponse et de noter les commentaires.OriginalL'auteur Tom
Essentiellement la même chose que @jfs, mais dans une ligne en utilisant
sorted
OriginalL'auteur Pablo Reyes
Si vos chemins d'accès sont triables commande, vous pouvez toujours les classer comme des chaînes de caractères (comme d'autres l'ont déjà mentionné dans les réponses).
Toutefois, si vos chemins d'accès d'utiliser un format datetime comme
%d.%m.%Y
, ça devient un peu plus impliquant. Depuisstrptime
ne prend pas en charge les caractères génériques, nous avons développé un module de datetime-glob pour analyser la date/temps de chemins d'accès, y compris les jokers.À l'aide de
datetime-glob
, vous pouvez marcher à travers l'arbre, la liste d'un répertoire, d'analyser la date/temps et de les classer comme des n-uplets(date/time, path)
.À partir du module du cas de test:
OriginalL'auteur marko.ristin