python – How to check whether a file is empty or not?

The Question :

304 people think this question is useful

I have a text file.
How can I check whether it’s empty or not?

The Question Comments :

The Answer 1

380 people think this answer is useful
>>> import os
>>> os.stat("file").st_size == 0
True

The Answer 2

129 people think this answer is useful
import os    
os.path.getsize(fullpathhere) > 0

The Answer 3

77 people think this answer is useful

Both getsize() and stat() will throw an exception if the file does not exist. This function will return True/False without throwing (simpler but less robust):

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

The Answer 4

29 people think this answer is useful

if for some reason you already had the file open you could try this:

>>> 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

The Answer 5

15 people think this answer is useful

If you are using Python3 with pathlib you can access os.stat() information using the Path.stat() method, which has the attribute st_size(file size in bytes):

>>> from pathlib import Path 
>>> mypath = Path("path/to/my/file")
>>> mypath.stat().st_size == 0 # True if empty

The Answer 6

9 people think this answer is useful

Ok so I’ll combine ghostdog74’s answer and the comments, just for fun.

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

False means a non-empty file.

So let’s write a function:

import os

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

The Answer 7

5 people think this answer is useful

if you have the file object, then

>>> 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

The Answer 8

2 people think this answer is useful

Since you have not defined what an empty file is. Some might consider a file with just blank lines also an empty file. So if you want to check if your file contains only blank lines (any whitespace character, ‘\r’, ‘\n’, ‘\t’), you can follow the example below:

Python3

import re

def whitespace_only(file):
    content = open(file, 'r').read()
    if re.search(r'^\s*$', content):
        return True

Explain: the example above uses regular expression (regex) to match the content (content) of the file.
Specifically: for regex of: ^\s*$ as a whole means if the file contains only blank lines and/or blank spaces.
^ asserts position at start of a line
\s matches any whitespace character (equal to [\r\n\t\f\v ])
* Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)
$ asserts position at the end of a line

The Answer 9

0 people think this answer is useful

An important gotcha: a compressed empty file will appear to be non-zero when tested with getsize() or stat() functions:

$ 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

So you should check whether the file to be tested is compressed (e.g. examine the filename suffix) and if so, either bail or uncompress it to a temporary location, test the uncompressed file, and then delete it when done.

The Answer 10

0 people think this answer is useful

if you want to check csv file is empty or not …….try this

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()

Add a Comment