Python >> Tutoriel Python >  >> Python

Comment lire les attributs de fichier dans le répertoire ?

Lorsque vous recherchez des attributs de fichier pour tous les fichiers d'un répertoire et que vous utilisez Python 3.5 ou une version plus récente, utilisez le os.scandir() fonction pour obtenir une liste de répertoires avec les attributs de fichier combinés . Cela peut potentiellement être plus efficace que d'utiliser os.listdir() puis récupérez les attributs du fichier séparément :

import os

with os.scandir() as dir_entries:
    for entry in dir_entries:
        info = entry.stat()
        print(info.st_mtime)

Le DirEntry.stat() La fonction, lorsqu'elle est utilisée sous Windows, n'a pas besoin d'effectuer d'appels système supplémentaires, l'heure de modification du fichier est déjà disponible. Les données sont mises en cache, donc entry.stat() supplémentaire les appels ne feront pas d'appels système supplémentaires.

Vous pouvez également utiliser le pathlib moduler les instances orientées objet pour obtenir le même :

from pathlib import Path

for path in Path('.').iterdir():
    info = path.stat()
    print(info.st_mtime)

Sur les versions antérieures de Python, vous pouvez utiliser le os.stat appel pour obtenir les propriétés du fichier comme l'heure de modification.

import os

for filename in os.listdir():
    info = os.stat(filename)
    print(info.st_mtime)

st_mtime est une valeur flottante sur python 2.5 et plus, représentant les secondes depuis l'époque ; utilisez le time ou datetime modules pour les interpréter à des fins d'affichage ou similaires.

Notez que la précision de la valeur dépend du système d'exploitation que vous utilisez :

La signification exacte et la résolution des attributs st_atime, st_mtime et st_ctime dépendent du système d'exploitation et du système de fichiers. Par exemple, sur les systèmes Windows utilisant les systèmes de fichiers FAT ou FAT32, st_mtime a une résolution de 2 secondes et st_atime n'a qu'une résolution de 1 jour. Consultez la documentation de votre système d'exploitation pour plus de détails.

Si tout ce que vous faites est d'obtenir l'heure de modification, alors le os.path.getmtime method est un raccourci pratique; il utilise le os.stat méthode sous le capot.

Notez cependant que le os.stat call est relativement coûteux (accès au système de fichiers), donc si vous faites cela sur beaucoup de fichiers et que vous avez besoin de plus d'un point de données par fichier, vous feriez mieux d'utiliser os.stat et réutiliser les informations renvoyées plutôt que d'utiliser le os.path méthodes de commodité où os.stat sera appelé plusieurs fois par fichier.


Si vous ne voulez que l'heure modifiée, alors os.path.getmtime(filename) l'obtiendra pour vous. Si vous utilisez listdir avec un argument, vous devrez également utiliser os.path.join :

import os, os.path

for filename in os.listdir(SOME_DIR):
    print os.path.getmtime(os.path.join(SOME_DIR, filename))