J'écris un script Python sous Windows. Je veux faire quelque chose en fonction de la taille du fichier. Par exemple, si la taille est supérieure à 0, j'enverrai un e-mail à quelqu'un, sinon je continuerai avec autre chose.
Comment vérifier la taille du fichier?
Path('./doc.txt').stat().st_size
Réponses:
Vous avez besoin de la
st_size
propriété de l'objet retourné paros.stat
. Vous pouvez l'obtenir soit en utilisantpathlib
(Python 3.4+):ou en utilisant
os.stat
:La sortie est en octets.
la source
stat_result.st_blocks
par la taille du bloc, mais je cherche toujours comment l'obtenir par programme et multiplateforme (pas viatune2fs
etc.)En utilisant
os.path.getsize
:La sortie est en octets.
la source
os.path.getsize
est tout simplementreturn os.stat(filename).st_size
os.stat
. La différence pourrait alorsLes autres réponses fonctionnent pour de vrais fichiers, mais si vous avez besoin de quelque chose qui fonctionne pour des "objets de type fichier", essayez ceci:
Cela fonctionne pour de vrais fichiers et StringIO, dans mes tests limités. (Python 2.7.3.) L'API "objet de type fichier" n'est pas vraiment une interface rigoureuse, bien sûr, mais la documentation de l' API suggère que les objets de type fichier devraient prendre en charge
seek()
ettell()
.Éditer
Une autre différence entre cela et
os.stat()
c'est que vous pouvezstat()
un fichier même si vous n'avez pas la permission de le lire. De toute évidence, l'approche de recherche / tell ne fonctionnera pas à moins d'avoir une autorisation de lecture.Modifier 2
À la suggestion de Jonathon, voici une version paranoïaque. (La version ci-dessus laisse le pointeur de fichier à la fin du fichier, donc si vous essayez de lire le fichier, vous ne récupérerez aucun octet!)
la source
os
, écrivezf.seek(0, 2)
à la place pour rechercher 0 octet à la fin.os
n'est pas utilisée:f.seek(old_file_position, 0)
os
.size
sortie est en octets?#seek()
: wiki.sei.cmu.edu/confluence/display/c/…Résultat:
la source
this function will convert bytes to MB.... GB... etc
Faux. Cette fonction convertira les octets en MiB, GiB, etc. Voir cet article .return f'{num:.1f} {x}'
en Python> = 3.5.Utilisation
pathlib
( ajouté en Python 3.4 ou un backport disponible sur PyPI ):Ce n'est vraiment qu'une interface
os.stat
, mais l'utilisationpathlib
fournit un moyen facile d'accéder à d'autres opérations liées aux fichiers.la source
Il y a une
bitshift
astuce que j'utilise si je veux convertir à partirbytes
de n'importe quelle autre unité. Si vous effectuez un décalage à droite,10
vous le décalez essentiellement par un ordre (multiple).la source
S'en tenir strictement à la question, le code Python (+ pseudo-code) serait:
la source
la source
nous avons deux options Les deux incluent l'importation du module os
1) importer os en tant que fonction os.stat () renvoie un objet qui contient autant d'en-têtes, y compris l'heure de création du fichier et l'heure de la dernière modification, etc. parmi eux st_size () donne la taille exacte du fichier.
os.stat ("nom de fichier"). st_size ()
2) import os Dans ce cas, nous devons fournir le chemin exact du fichier (chemin absolu), pas un chemin relatif.
os.path.getsize ("chemin du fichier")
la source