Tengo un archivo de texto
¿Cómo puedo verificar si está vacío o no?
Tengo un archivo de texto
¿Cómo puedo verificar si está vacío o no?
Respuestas:
>>> import os
>>> os.stat("file").st_size == 0
True
import os
os.path.getsize(fullpathhere) > 0
OSError
y devolver False.
Ambos getsize()
y stat()
lanzarán una excepción si el archivo no existe. Esta función devolverá Verdadero / Falso sin lanzar (más simple pero menos 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)
y os.path.getsize(fpath)
, en cuyo caso la función propuesta generará una excepción.
OSError
, como se propone en otro comentario .
TypeError
cuál se generará en caso de que la entrada fpath sea None
.
si por alguna razón ya tenía el archivo abierto, podría intentar esto:
>>> 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, entonces combinaré la respuesta de ghostdog74 y los comentarios, solo por diversión.
>>> import os
>>> os.stat('c:/pagefile.sys').st_size==0
False
False
significa un archivo no vacío.
Entonces, escribamos una función:
import os
def file_is_empty(path):
return os.stat(path).st_size==0
Si está utilizando Python3 pathlib
, puede acceder a la os.stat()
información utilizando el Path.stat()
método, que tiene el atributo st_size
(tamaño del archivo en bytes):
>>> from pathlib import Path
>>> mypath = Path("path/to/my/file")
>>> mypath.stat().st_size == 0 # True if empty
si tiene el objeto de archivo, entonces
>>> 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 problema importante: un archivo vacío comprimido parecerá ser distinto de cero cuando se pruebe con getsize()
o stat()
funciones:
$ 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
Por lo tanto, debe verificar si el archivo que se va a probar está comprimido (por ejemplo, examinar el sufijo del nombre de archivo) y, de ser así, rescatarlo o descomprimirlo en una ubicación temporal, probar el archivo sin comprimir y luego eliminarlo cuando haya terminado.
Como no has definido qué es un archivo vacío. Algunos podrían considerar un archivo con solo líneas en blanco y también un archivo vacío. Entonces, si desea verificar si su archivo contiene solo líneas en blanco (cualquier carácter de espacio en blanco, '\ r', '\ n', '\ t') , puede seguir el siguiente ejemplo:
Python3
import re
def whitespace_only(file):
content = open(file, 'r').read()
if re.search(r'^\s*$', content):
return True
Explique: el ejemplo anterior usa la expresión regular (regex) para que coincida con el contenido ( content
) del archivo.
Específicamente: para expresiones regulares de: ^\s*$
en su conjunto significa si el archivo contiene solo líneas en blanco y / o espacios en blanco.
- ^
afirma la posición al comienzo de una línea
- \s
coincide con cualquier carácter de espacio en blanco (igual a [\ r \ n \ t \ f \ v])
- *
Cuantificador - Coincide entre cero e ilimitado veces, tantas veces como sea posible, devolviendo según sea necesario ( codicioso)
- $
afirma la posición al final de una línea
si desea comprobar que el archivo csv está vacío o no ... intente esto
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
en lugar de 6