Bonjour,
je souhaiterais avoir sous la forme AAAAMMJJ-HHMMSS le moment de la dernière modification d'un fichier. Comment faire ?
Version imprimable
Bonjour,
je souhaiterais avoir sous la forme AAAAMMJJ-HHMMSS le moment de la dernière modification d'un fichier. Comment faire ?
Deux indices:
datetime
os.stat
Ok je suis en train de regarder cela.
Voilà une solution :
Il y a peut être plus efficace ou plus simple. Si c'est le cas, je suis preneur.Code:
1
2
3 lastModification = time.ctime(os.stat(pathOfTheFile).st_mtime) lastModification = time.strptime(lastModification, "%a %b %d %H:%M:%S %Y") lastModification = time.strftime("%Y%m%d-%H%M%S", lastModification)
J'utilise cela:
TyrtamosCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 import os import time nfc = r"C:\Python26\Python.exe" nbs = os.path.getmtime(nfc) print nbs # affiche: 1239741770.0 = nb de secondes depuis l'epoch (date de référence dépend des OS. print time.strftime("%d/%m/%Y-%H:%M:%S",time.gmtime(nbs)) # affiche: 14/04/2009-20:42:50
C'est plus concis effectivement. Merci.
En fait cela ne fonctionne pas chez moi. Merci quand même.
Pardon mais perso j'utilise [ST_ATIME] et [ST_MTIME] pour les dates...
Pas bon ?
Pourtant avec (asctime(localtime(montruc[ST_ATIME]))) et un def de conversion cela donne un :
http://pagesperso-orange.fr/wasabi/r...ages/infos.jpg
En clair, c'est à dire en code, cela donne... montruc est-il un objet fichier ?
Non, c'est le retour d'un os.stat sur un fichier ou dossier :
Tu y retrouve les infos que tu traite avec asctime/localtime sur le st_atime du tuple.Code:
1
2
3
4 >>> montruc = os.stat('test.c') >>> print montruc posix.stat_result(st_mode=33261, st_ino=1791459L, st_dev=2050L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=210L, st_atime=1253428547, st_mtime=1183884292, st_ctime=1253428546) >>>
Le résultat est a mettre dans l'ordre que tu recherche. Dans mon cas :
Cela reviens à ton os.stat(pathOfTheFile).st_mtime mais j'utilise asctime/localtime.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 def ConvDateInfAcc(InfAcc): if InfAcc[0:3] == 'Mon': AccesDate = 'Lundi ' + InfAcc[8:10] elif InfAcc[0:3] == 'Tue': AccesDate = 'Mardi ' + InfAcc[8:10] elif InfAcc[0:3] == 'Wed': AccesDate = 'Mercredi ' + InfAcc[8:10] elif InfAcc[0:3] == 'Thu': AccesDate = 'Jeudi ' + InfAcc[8:10] elif InfAcc[0:3] == 'Fri': AccesDate = 'Vendredi ' + InfAcc[8:10] elif InfAcc[0:3] == 'Sat': AccesDate = 'Samedi ' + InfAcc[8:10] elif InfAcc[0:3] == 'Sun': AccesDate = 'Dimanche ' + InfAcc[8:10] else: AccesDate = 'Erreur' if InfAcc[4:7] == 'Jan': AccesDate = AccesDate + ' Janvier ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] elif InfAcc[4:7] == 'Feb': AccesDate = AccesDate + u' Février ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] elif InfAcc[4:7] == 'Mar': AccesDate = AccesDate + ' Mars ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] elif InfAcc[4:7] == 'Apr': AccesDate = AccesDate + ' Avril ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] elif InfAcc[4:7] == 'May': AccesDate = AccesDate + ' Mai ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] elif InfAcc[4:7] == 'Jun': AccesDate = AccesDate + ' Juin ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] elif InfAcc[4:7] == 'Jul': AccesDate = AccesDate + ' Juillet ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] elif InfAcc[4:7] == 'Aug': AccesDate = AccesDate + ' Aout ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] elif InfAcc[4:7] == 'Sep': AccesDate = AccesDate + ' Septembre ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] elif InfAcc[4:7] == 'Oct': AccesDate = AccesDate + ' Octobre ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] elif InfAcc[4:7] == 'Nov': AccesDate = AccesDate + ' Novembre ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] elif InfAcc[4:7] == 'Dec': AccesDate = AccesDate + u' Décembre ' + InfAcc[20:24] + u' à ' + InfAcc[11:19] else: AccesDate = 'Erreur' return AccesDate
@+
Petit edit : st_mtime et non st_atime bien sur... J'utilise les deux d'où mon erreur.
Euaaaah, ce code pique les yeux...
Utilise un dictionnaire pour faire la traduction entre version anglaise et celle que tu veux afficher. D'ailleurs ce serait plus propre de faire avec le numéro des mois: sait-on jamais qu'un jour il te sorte déjà les mois en français...
Ma méthode s'occupe de tout il me semble donc pour le coup je ne vois pas trop l'utilité d'aller mettre les mains dans le cambouis comme l'a fait PauseKawa. Cela évite de perdre du temps et permet de boire encore plus de café... :mouarf:
Parce-qu'il y a celle là aussi
C'est tout!Code:
1
2
3 import os, time (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(fichier) print "derniere modif: %s" % time.ctime(mtime)
Après c'est du split et du dico
donne un truc du genre : ['2009', 'Oct', 'Wed', '14:16:41']Code:
1
2
3
4
5 import os, time (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(fichier) a=time.ctime(mtime).split(); b=[] b.append(a[4]); b.append(a[1]); b.append(a[0]); b.append(a[3]) print b
J'adore les posts d'Antoine_935 :mouarf:
C'est vrais que c'est un copier/coller d'un truc pondu il y a un peut plus d'un mois (mes débuts en Python...) et qu'à l'époque je n'utilisait pas les dico (depuis trop...). Mais bon, pas de honte puisque qu'en tant que néophyte autodidacte j'avais trouver une solution.
Par contre c'est vrais que c'est moche :mouarf:
C'est la différence entre un pro et quelqu'un sans formation préalable, la pause café.
Mon 'intrusion' n'avais pas pour but de te trouver une solution (tu n'as pas besoin de moi) mais de savoir si j'étais dans le bon et cela dans le même sens que ton sujet.
Ceci dit je vais regarder les différentes réponses et en apprendre plus (comme toujours sur ce forum :ccool:)
Merci à tous
juste pour faire avancer le schmilblick sur cette vieille discussion :
Code:
1
2
3 import os, time (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(fichier) time.strftime("%Y%m%d-%H%M%S", time.gmtime(mtime)) #donne le format AAAAMMJJ-HHMMSS
Bonjour,
J'utilise de plus en plus l'édition des temps en format "ISO 8601" (https://fr.wikipedia.org/wiki/ISO_8601), ce qui a l'avantage de l'universalité, et donc de faciliter les échanges entre logiciels.
Exemple:
On peut remplacer le 'T' qui se trouve entre la date et l'heure par un autre caractère ('_', espace, ...): il suffit de le mettre en argument à "isoformat". On peut aussi, bien entendu, utiliser un slash pour la date au lieu du tiret avec la méthode "replace":Code:
1
2
3
4
5
6
7 import os from datetime import datetime tm = os.path.getmtime(r"C:\Python27\Python.exe") print datetime.fromtimestamp(tm).isoformat() 2013-05-15T22:43:44
Cette méthode est intéressante, parce le temps reste lisible par un être humain (plus que le nombre de secondes depuis le 1/1/1970 ;) ), et que l'ordre alphabétique est le même que l'ordre chronologique. Par exemple, il peut être intéressant de stocker ainsi des temps sous forme de chaines dans une base de données dans sqlite3.Code:
1
2 print datetime.fromtimestamp(tm).isoformat('_').replace('-', '/') 2013/05/15_22:43:44
Cette solution a déjà été proposée ;)Citation:
juste pour faire avancer le schmilblick sur cette vieille discussion :