Open In App

os.DirEntry.is_file() method - Python

Last Updated : 21 May, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

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.


Next Article
Article Tags :
Practice Tags :

Similar Reads