402 votes

python : comment vérifier si un fichier est vide ou non ?

J'ai un fichier texte. Comment puis-je vérifier si le fichier est vide ou non ?

502voto

ghostdog74 Points 86060
>>> import os
>>> os.stat("file").st_size == 0
True

3 votes

C'est bien aussi. Mais je ne veux pas importer de stat. C'est suffisamment court et agréable et la position de la taille dans la liste renvoyée ne va pas changer de sitôt.

8 votes

Notez que les types de fichiers fonctionnent également pour json. Parfois, json.load() pour un fichier vide ne fonctionne pas et ceci fournit une bonne façon de gérer ce cas.

0 votes

Que se passe-t-il si le fichier ne contient que des nouvelles lignes / vides ? mauvaise réponse !

155voto

Jon Points 2871
import os    
os.path.getsize(fullpathhere) > 0

8 votes

Par sécurité, vous devrez peut-être attraper OSError et retourner Faux.

7 votes

Quelle est la différence/avantage d'utiliser cette méthode par rapport à os.state('file').st_size ?

4 votes

On dirait que les deux sont les mêmes sous le capot : stackoverflow.com/a/18962257/1397061

94voto

ronedg Points 153

Les fonctions getsize() et stat() lèveront une exception si le fichier n'existe pas, cette fonction fera l'affaire :

import os
def is_non_zero_file(fpath):  
    return True if os.path.isfile(fpath) and os.path.getsize(fpath) > 0 else False

0 votes

J'aime vraiment utiliser os.path.getsize()

19 votes

Il y a une condition de concurrence car le fichier peut être supprimé entre les appels à os.path.isfile(fpath) y os.path.getsize(fpath) Dans ce cas, la fonction proposée lève une exception.

5 votes

Mieux vaut essayer d'attraper le OSError à la place, comme proposé dans un autre commentaire .

38voto

robert king Points 5369

Si, pour une raison quelconque, vous aviez déjà le fichier ouvert, vous pouvez essayer ceci :

>>> with open('New Text Document.txt') as my_file:
...     # I already have file open at this point.. now what?
...     my_file.seek(0) #ensure you're at the start of the file..
...     first_char = my_file.read(1) #get the first character
...     if not first_char:
...         print "file is empty" #first character is the empty string..
...     else:
...         my_file.seek(0) #first character wasn't empty, return to start of file.
...         #use file now
...
file is empty

0 votes

Exactement le scénario que j'ai eu... après avoir vérifié le fichier, le pointeur a sauté le premier caractère et j'étais confus sur la sortie finale.... merci pour cela...

12voto

Ron Klein Points 3409

Ok, donc je vais combiner Réponse de ghostdog74 et les commentaires, juste pour le plaisir.

>>> import os
>>> os.stat('c:/pagefile.sys').st_size==0
False

False signifie un fichier non vide.

Alors, écrivons une fonction :

import os

def file_is_empty(path):
    return os.stat(path).st_size==0

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