os.DirEntry.is_file() method - Python
Last Updated :
21 May, 2025
os.DirEntry.is_file() method checks if a directory entry is a regular file. It is used with entries returned by os.scandir(). This method is faster than other file checks because it uses cached system information. It also accepts an optional follow_symlinks parameter that determines whether to follow symbolic links when checking. We use the following folder structure in the example below:
.
├── example.py
├── sample.txt
├── some_dir/
└── link_to_file -> example.py (symbolic link)
Example:
Python
import os
with os.scandir('.') as d:
for e in d:
if e.is_file():
print(f"{e.name} is a file")
Output
example.py is a file
sample.txt is a file
Explanation: os.scandir('.') iterates over current directory entries. For each entry e, e.is_file(follow_symlinks=False) checks if it’s a file without following symlinks, then prints its name with a corresponding label.
Syntax of os.DirEntry.is_file()
DirEntry.is_file(follow_symlinks=True)
Parameters: follow_symlinks (bool, optional, default=True) determines whether to follow symbolic links when checking if the entry is a file.
- If True, the method follows symlinks and returns True if the target is a file.
- If False, it checks the entry itself without following the symlink.
Return Value: It returns True if the entry (or its symlink target, depending on follow_symlinks) is a file; otherwise, returns False.
Examples
Example 1: This example shows how to check if each entry itself is a file without following symbolic links.
Python
import os
with os.scandir('.') as it:
for e in it:
if e.is_file(follow_symlinks=False):
print(f"{e.name}: file (no symlink)")
else:
print(f"{e.name}: not a file or symlink target")
Output
example.py: file (no symlink)
sample.txt: file (no symlink)
some_dir: not a file or symlink target
link_to_file: not a file or symlink target
Example 2: This example combines is_file() with stat() to get file size and is_dir() to identify directories.
Python
import os
with os.scandir('.') as it:
for e in it:
if e.is_file():
size = e.stat().st_size
print(f"{e.name} is a file of size {size} bytes")
elif e.is_dir():
print(f"{e.name} is a directory")
Output
example.py is a file of size 2048 bytes
sample.txt is a file of size 1024 bytes
docs is a directory
Explanation: e.is_file() follows symlinks by default. For files, it gets the size via cached e.stat().st_size and prints the name with size. For directories, it prints the name.
Example 3: This example defines a recursive function to list all files in a directory and its subdirectories.
Python
import os
def fun(p):
with os.scandir(p) as it:
for e in it:
if e.is_file():
print(e.path)
elif e.is_dir():
fun(e.path) # Recursive call
fun('.')
Output
./example.py
./sample.txt
./docs/readme.md
./docs/tutorial.pdf
Explanation: fun(p) recursively scans the directory p using os.scandir(p). For each entry e, if it’s a file, it prints the full path e.path. If it’s a directory, the function calls itself recursively to traverse deeper.