Ho un file di testo.
Come posso verificare se è vuoto o no?
Ho un file di testo.
Come posso verificare se è vuoto o no?
Risposte:
>>> import os
>>> os.stat("file").st_size == 0
True
import os
os.path.getsize(fullpathhere) > 0
OSError
e restituire False.
Entrambi getsize()
e stat()
genereranno un'eccezione se il file non esiste. Questa funzione restituirà True / False senza lanciare (più semplice ma meno robusto):
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)
e os.path.getsize(fpath)
, nel qual caso la funzione proposta solleverà un'eccezione.
OSError
invece, come proposto in un altro commento .
TypeError
che verrà generato nel caso in cui il percorso di input sia None
.
se per qualche motivo hai già aperto il file potresti provare questo:
>>> 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, unirò la risposta di ghostdog74 e i commenti, solo per divertimento.
>>> import os
>>> os.stat('c:/pagefile.sys').st_size==0
False
False
indica un file non vuoto.
Quindi scriviamo una funzione:
import os
def file_is_empty(path):
return os.stat(path).st_size==0
Se stai usando Python3 pathlib
puoi accedere alle os.stat()
informazioni usando il Path.stat()
metodo, che ha l'attributo st_size
(dimensione del file in byte):
>>> from pathlib import Path
>>> mypath = Path("path/to/my/file")
>>> mypath.stat().st_size == 0 # True if empty
se hai l'oggetto file, allora
>>> 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 gotcha importante: un file vuoto compresso apparirà diverso da zero quando testato con getsize()
o stat()
funzioni:
$ 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
Pertanto, è necessario verificare se il file da testare è compresso (ad esempio esaminare il suffisso del nome file) e, in tal caso, salvarlo o decomprimerlo in una posizione temporanea, testare il file non compresso e quindi eliminarlo al termine.
Dal momento che non hai definito cosa sia un file vuoto. Alcuni potrebbero considerare un file con solo righe vuote anche un file vuoto. Quindi, se vuoi controllare se il tuo file contiene solo righe vuote (qualsiasi carattere di spazio, '\ r', '\ n', '\ t') , puoi seguire l'esempio di seguito:
python3
import re
def whitespace_only(file):
content = open(file, 'r').read()
if re.search(r'^\s*$', content):
return True
Spiega: l'esempio sopra usa l'espressione regolare (regex) per abbinare il contenuto ( content
) del file.
In particolare: per regex di: ^\s*$
nel suo insieme significa se il file contiene solo righe vuote e / o spazi vuoti.
- ^
afferma la posizione all'inizio di una riga
- \s
corrisponde a qualsiasi carattere di spazio bianco (uguale a [\ r \ n \ t \ f \ v])
- *
Quantificatore - Corrisponde tra zero e un numero illimitato di volte, quante più volte possibile, restituendo quanto necessario ( avido)
- $
afferma la posizione alla fine di una riga
se vuoi controllare che il file CSV sia vuoto o no ....... prova questo
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
invece di 6