2 votes

la taille réelle d'un fichier

J'essaie d'obtenir la taille d'un fichier qui est en cours de téléchargement par un autre processus. J'ai utilisé le code ci-dessous(que j'ai trouvé dans aquí ) :

os.stat(filepath).st_blocks*512

Cependant, elle renvoie également la taille allouée du fichier. Lors d'inspections récentes, j'ai découvert que la précision de cette solution dépend du système d'exploitation sur lequel elle fonctionne. Actuellement, mon système d'exploitation est un serveur ubuntu 12.04 avec un système de fichiers ext3. Existe-t-il un autre moyen de trouver la taille réelle d'un fichier en python ?

6voto

Joachim Pileborg Points 121221

Desde el la documentation pour stat() :

Sur certains systèmes Unix (tels que Linux), les attributs suivants peuvent également être disponibles :

  • st_blocks - nombre de blocs de 512 octets alloués pour le fichier
  • st_blksize - taille de bloc du système de fichiers
  • st_rdev - type de dispositif si c'est un dispositif inode
  • st_flags - drapeaux définis par l'utilisateur pour le fichier

Ce que vous semblez vouloir est st_blocks * st_blksize . Notez que c'est no la taille réelle du fichier, qui est la st_size membre. Le nombre de blocs est multiplié par la taille du bloc. plus grand que la taille réelle du fichier.


Note : Quand il est dit " st_blocks - nombre de blocs de 512 octets alloués pour le fichier", le nombre 512 est en fait dépendant du système. La spécification POSIX dit

L'unité pour le st_blocks membre de la stat n'est pas définie dans la norme POSIX.1-2008. Dans certaines implémentations, elle est de 512 octets. Elle peut différer selon le système de fichiers.

Si le st_block est disponible, ne soyez pas surpris si c'est une autre valeur.

1voto

waitingkuo Points 7290

Essayez

os.stat(filepath).st_size

Il semble que cela renvoie ce que vous voyez dans "ls -l".

0voto

juankysmith Points 2589

Indépendamment de votre OS, vous pouvez accéder aux métadonnées du fichier :

metadata = os.stat(path_to_file)
metadata.st_size

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X