J'ai un fichier texte.
Comment puis-je vérifier s'il est vide ou non?
J'ai un fichier texte.
Comment puis-je vérifier s'il est vide ou non?
Réponses:
>>> import os
>>> os.stat("file").st_size == 0
True
import os
os.path.getsize(fullpathhere) > 0
OSError
et retourner Faux.
Les deux getsize()
et stat()
lèveront une exception si le fichier n'existe pas. Cette fonction retournera True / False sans lancer (plus simple mais moins robuste):
import os
def is_non_zero_file(fpath):
return os.path.isfile(fpath) and os.path.getsize(fpath) > 0
os.path.getsize()
os.path.isfile(fpath)
et os.path.getsize(fpath)
, auquel cas la fonction proposée déclenche une exception.
OSError
plutôt, comme proposé dans un autre commentaire .
TypeError
ce qui sera augmenté dans le cas où le fpath d'entrée est None
.
si pour une raison quelconque vous aviez déjà ouvert le fichier, 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
Ok donc je vais combiner la 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.
Écrivons donc une fonction:
import os
def file_is_empty(path):
return os.stat(path).st_size==0
Si vous utilisez Python3 avec, pathlib
vous pouvez accéder aux os.stat()
informations à l'aide de la Path.stat()
méthode, qui a l'attribut st_size
(taille du fichier en octets):
>>> from pathlib import Path
>>> mypath = Path("path/to/my/file")
>>> mypath.stat().st_size == 0 # True if empty
si vous avez l'objet fichier, alors
>>> import os
>>> with open('new_file.txt') as my_file:
... my_file.seek(0, os.SEEK_END) # go to end of file
... if my_file.tell(): # if current position is truish (i.e != 0)
... my_file.seek(0) # rewind the file for later use
... else:
... print "file is empty"
...
file is empty
Un piège important: un fichier vide compressé apparaîtra non nul lorsqu'il est testé avec getsize()
ou stat()
fonctionne:
$ python
>>> import os
>>> os.path.getsize('empty-file.txt.gz')
35
>>> os.stat("empty-file.txt.gz").st_size == 0
False
$ gzip -cd empty-file.txt.gz | wc
0 0 0
Vous devez donc vérifier si le fichier à tester est compressé (par exemple, examinez le suffixe du nom de fichier) et si c'est le cas, libérez-le ou décompressez-le dans un emplacement temporaire, testez le fichier non compressé, puis supprimez-le une fois terminé.
Puisque vous n'avez pas défini ce qu'est un fichier vide. Certains pourraient considérer un fichier avec des lignes vides comme un fichier vide. Donc, si vous voulez vérifier si votre fichier ne contient que des lignes vides (n'importe quel caractère d'espacement, '\ r', '\ n', '\ t') , vous pouvez suivre l'exemple ci-dessous:
Python3
import re
def whitespace_only(file):
content = open(file, 'r').read()
if re.search(r'^\s*$', content):
return True
Expliquez: l'exemple ci-dessus utilise une expression régulière (regex) pour faire correspondre le contenu ( content
) du fichier.
Plus précisément: pour l'expression régulière de: ^\s*$
dans son ensemble signifie que le fichier ne contient que des lignes vides et / ou des espaces vides.
- ^
affirme la position au début d'une ligne
- \s
correspond à tout caractère d'espacement (égal à [\ r \ n \ t \ f \ v])
- *
Quantificateur - Correspond entre zéro et un nombre illimité de fois, autant de fois que possible, en redonnant au besoin ( gourmand)
- $
affirme sa position à la fin d'une ligne
si vous voulez vérifier que le fichier csv est vide ou non ....... essayez ceci
with open('file.csv','a',newline='') as f:
csv_writer=DictWriter(f,fieldnames=['user_name','user_age','user_email','user_gender','user_type','user_check'])
if os.stat('file.csv').st_size > 0:
pass
else:
csv_writer.writeheader()
stat.ST_SIZE
au lieu de 6