Eu tenho um arquivo de texto.
Como posso verificar se está vazio ou não?
Eu tenho um arquivo de texto.
Como posso verificar se está vazio ou não?
Respostas:
>>> import os
>>> os.stat("file").st_size == 0
True
import os
os.path.getsize(fullpathhere) > 0
OSError
e devolver Falso.
Ambos getsize()
e stat()
lançarão uma exceção se o arquivo não existir. Esta função retornará True / False sem lançar (mais simples, mas menos robusta):
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)
, nesse caso, a função proposta gerará uma exceção.
OSError
lugar, como proposto em outro comentário .
TypeError
que será gerado no caso em que o caminho de entrada seja None
.
se por algum motivo você já tinha o arquivo aberto, poderia tentar o seguinte:
>>> 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, então eu vou combinar a resposta de ghostdog74 e os comentários, apenas por diversão.
>>> import os
>>> os.stat('c:/pagefile.sys').st_size==0
False
False
significa um arquivo não vazio.
Então, vamos escrever uma função:
import os
def file_is_empty(path):
return os.stat(path).st_size==0
Se você estiver usando Python3, pathlib
poderá acessar os.stat()
informações usando o Path.stat()
método, que possui o atributo st_size
(tamanho do arquivo em bytes):
>>> from pathlib import Path
>>> mypath = Path("path/to/my/file")
>>> mypath.stat().st_size == 0 # True if empty
se você tiver o objeto file, então
>>> 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
Uma dica importante: um arquivo vazio compactado parecerá diferente de zero quando testado com getsize()
ou stat()
funções:
$ 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
Portanto, você deve verificar se o arquivo a ser testado está compactado (por exemplo, examinar o sufixo do nome do arquivo) e, se for o caso, liberar ou descompactá-lo para um local temporário, testar o arquivo descompactado e excluí-lo quando terminar.
Como você não definiu o que é um arquivo vazio. Alguns podem considerar um arquivo com apenas linhas em branco e também um arquivo vazio. Portanto, se você quiser verificar se seu arquivo contém apenas linhas em branco (qualquer caractere de espaço em branco, '\ r', '\ n', '\ t') , siga o exemplo abaixo:
Python3
import re
def whitespace_only(file):
content = open(file, 'r').read()
if re.search(r'^\s*$', content):
return True
Explique: o exemplo acima usa expressão regular (regex) para corresponder ao conteúdo ( content
) do arquivo.
Especificamente: para regex de: ^\s*$
como um todo significa se o arquivo contém apenas linhas em branco e / ou espaços em branco.
- ^
afirma posição no início de uma linha
- \s
corresponde a qualquer caractere de espaço em branco (igual a [\ r \ n \ t \ f \ v])
- *
Quantificador - Corresponde entre zero e ilimitado vezes, quantas vezes for possível, retornando conforme necessário ( ganancioso)
- $
afirma a posição no final de uma linha
se você deseja verificar se o arquivo csv está vazio ou não ... tente isso
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
em vez de 6