2013-05-09 4 views
1

Je cherche une solution pour avoir le temps de lire un fichier. Le fichier ne sera pas modifié ou créé juste ouvert en mode lecture. Cela fonctionne mais seulement pour écrire dans un fichier. Si j'ouvre le fichier en mode lecture, l'heure n'est pas correcte:Python obtiens la dernière heure de lecture d'un fichier

f = open('my_path/test.txt', 'r') 
f.close() 

print time.ctime(os.stat('my_path/test.txt').st_mtime) 

Des indices?

+0

J'ai essayé ceci et cela ne fonctionne pas si j'ouvre le fichier en mode lecture dans le code Python. – snowflake

Répondre

10

Vous recherchez la mauvaise entrée dans la structure stat. Vous souhaitez utiliser la valeur .st_atime à la place:

print time.ctime(os.stat('my_path/test.txt').st_atime) 

De l'os.stat() documentation:

  • st_atime - le temps de la plupart un accès récent,

Notez que la mise à jour pas tous les systèmes l'horodatage atime, voir Criticism of atime. A partir de la version 2.6.30, les noyaux Linux utilisent par défaut le paramètre relatime, où les valeurs atime ne sont mises à jour que si elles datent de plus de 24 heures. Vous pouvez modifier cela en définissant l'option strictatime dans fstab.

Windows Vista a également désactivé les mises à jour à atime, mais vous pouvez re-enable them.

+0

Cela ne fonctionne que si j'ouvre le fichier dans l'explorateur mais pas dans le code Python ... – snowflake

+0

Dans ce cas, le système d'exploitation ne fait que mettre à jour le temps d'accès dans certaines circonstances que Python ne déclenche pas. Si la valeur 'atime' n'est pas mise à jour, aucune autre statistique ne s'affiche lorsque vous avez accédé à un fichier pour la dernière fois. Quelle plate-forme est-ce, Windows? –

+0

Non, Linux (Ubuntu 12.04) mais le programme doit être multi-plateforme. Jusqu'à présent, j'ai résolu cela en enregistrant le nom du fichier dans un nouveau fichier, mais je l'ai trouvé pas très agréable. Peut-être que c'est le seul moyen ... – snowflake

Questions connexes