How to check whether a file is empty or not


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

Asked By:



import os    
os.path.getsize(fullpathhere) > 0
Answered By: Jon
>>> import os
>>> os.stat("file").st_size == 0
Answered By: ghostdog74

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?
... # Ensure you're at the start of the file..
...     first_char = # Get the first character
...     if not first_char:
...         print "file is empty" # The first character is the empty string..
...     else:
... # The first character wasn't empty. Return to the start of the file.
...         # Use file now
file is empty
Answered By: Rusty Rob

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
Answered By: ronedg

Combining ghostdog74’s answer and the comments:

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

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
Answered By: Ron Klein

if you have the file object, then

>>> import os
>>> with open('new_file.txt') as my_file:
..., os.SEEK_END) # go to end of file
...     if my_file.tell(): # if current position is truish (i.e != 0)
... # rewind the file for later use 
...     else:
...         print "file is empty"
file is empty
Answered By: Qlimax

If you are using Python 3 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
Answered By: M.T

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')
>>> os.stat("empty-file.txt.gz").st_size == 0

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

Better way to test size of compressed files: read it directly using the appropriate compression module. You would only need to read the first line of the file, for example.

Answered By: Trutane

If you want to check if a 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:
Answered By: Rajan Singh

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

Python 3

import re

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

Explanation: the example above uses a regular expression (regex) to match the content (content) of the file.

Specifically: for a 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 white space character (equal to [rntfv ])
  • * 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
Answered By: KV88

A Complete Example For Appending JSON To A File

Reusable Function

import json
import os 

def append_json_to_file(filename, new_data):
    """ If filename does not exist """
    data = []
    if not os.path.isfile(filename):
        with open(filename, 'w') as f:
        """ If filename exists but empty """
        if os.stat(filename).st_size == 0:
            data = []
            with open(filename, 'w') as f:
        """ If filename exists """
        with open(filename, 'r+') as f:
            file_data = json.load(f)
            json.dump(file_data, f)

Run It

filename = './exceptions.json'
append_json_to_file(filename, {
    'name': 'LVA',
    'age': 22
append_json_to_file(filename, {
    'name': 'CSD',
    'age': 20


[{"name": "LVA", "age": 22}, {"name": "CSD", "age": 20}]
Answered By: Sean William

I was looking for something that checks whether a file is completely empty or not including blank space or newline. I achieved that with the following

def is_cache_empty():
    with open(FILE_PATH) as file:
        return True if len( == 0 else False
Answered By: rocktimsaikia
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.