How to check text file exists and is not empty in python
To check whether file is present and is not empty, you need to call the combination of os.path.exists
and os.path.getsize
with the "and" condition. For example:
import osmy_path = "/path/to/file"if os.path.exists(my_path) and os.path.getsize(my_path) > 0: # Non empty file exists # ... your code ...else: # ... your code for else case ...
As an alternative, you may also use try/except
with the os.path.getsize
(without using os.path.exists
) because it raisesOSError
if the file does not exist or if you do not have the permission to access the file. For example:
try: if os.path.getsize(my_path) > 0: # Non empty file exists # ... your code ... else: # Empty file exists # ... your code ...except OSError as e: # File does not exists or is non accessible # ... your code ...
References from the Python 3 document
os.path.getsize()
will:Return the size, in bytes, of path. Raise
OSError
if the file does not exist or is inaccessible.For empty file, it will return
0
. For example:>>> import os>>> os.path.getsize('README.md')0
whereas
os.path.exists(path)
will:Return
True
if path refers to an existing path or an open file descriptor. ReturnsFalse
for broken symbolic links.On some platforms, this function may return
False
if permission is not granted to executeos.stat()
on the requested file, even if the path physically exists.
On Python3 you should use pathlib.Path features for this purpose:
import pathlib as ppath = p.Path(f)if path.exists() and path.stat().st_size > 0: raise RuntimeError("file exists and is not empty")
As you see the Path object contains all the functionality needed to perform the task.
You may want to try this:
def existandnotempty(fp): if not os.path.isfile(fp): retun False k=0 with open(fp,'r') as f: for l in f: k+=len(l) if k: return False k+=1 return True