Check if a Directory Contains Files using Python

Python is a versatile programming language that is widely used for various purposes, including file and directory operations. One of the most common tasks in file and directory operations is to check if a directory contains files or not. In this article, we will discuss how to check if a directory contains files using Python.

Before we dive into the implementation, let's understand the concept of directories and files.

  • A directory is a folder that contains files and other directories. It is used to organize files and directories in a hierarchical manner. In other words, a directory can contain other directories, which are called sub-directories.

  • A file is a collection of data that is stored on a computer. It can be a text file, an image file, an audio file, or any other type of file.

Now that we have a basic understanding of directories and files, let's discuss how to check if a directory contains files using Python.

Using os.listdir() Method

The os module in Python provides a way to interact with the file system. The os.listdir() method returns a list of all files and directories in the specified path.

Here's how to use the os.listdir() method to check if a directory contains files −

import os
import tempfile

# Create a temporary directory for demonstration
temp_dir = tempfile.mkdtemp()
print(f"Created temporary directory: {temp_dir}")

# Check if directory is empty
if len(os.listdir(temp_dir)) == 0:
    print("Directory is empty")
else:
    print("Directory contains files")

# Create a file in the directory
with open(os.path.join(temp_dir, "test.txt"), "w") as f:
    f.write("Hello World")

# Check again
if len(os.listdir(temp_dir)) == 0:
    print("Directory is empty")
else:
    print("Directory contains files")
Created temporary directory: /tmp/tmpxxxxxxxx
Directory is empty
Directory contains files

In the above code, we first import the os module. We use os.listdir() to get a list of all files and directories. If the length is zero, the directory is empty. If greater than zero, it contains files.

Using glob.glob() Method

The glob module provides a way to search for files that match a specific pattern. The glob.glob() method returns a list of files matching the pattern.

import glob
import tempfile
import os

# Create temporary directory with a file
temp_dir = tempfile.mkdtemp()
with open(os.path.join(temp_dir, "sample.txt"), "w") as f:
    f.write("Sample content")

# Check using glob
files = glob.glob(temp_dir + '/*')
if len(files) == 0:
    print("Directory is empty")
else:
    print(f"Directory contains {len(files)} files")
    print(f"Files: {[os.path.basename(f) for f in files]}")
Directory contains 1 files
Files: ['sample.txt']

We use the pattern /* to match all files in the directory. The glob.glob() method returns full paths, so we can get more detailed information about the files.

Using os.scandir() Method

The os.scandir() method returns an iterator of directory entries. This method is more efficient than os.listdir() as it returns an iterator instead of a list.

import os
import tempfile

# Create temporary directory
temp_dir = tempfile.mkdtemp()

# Check empty directory
if not any(os.scandir(temp_dir)):
    print("Directory is empty")
else:
    print("Directory contains files")

# Add a file
with open(os.path.join(temp_dir, "data.txt"), "w") as f:
    f.write("Data content")

# Check again
if not any(os.scandir(temp_dir)):
    print("Directory is empty")
else:
    print("Directory contains files")
    
# List directory contents
with os.scandir(temp_dir) as entries:
    for entry in entries:
        print(f"Found: {entry.name} ({'file' if entry.is_file() else 'directory'})")
Directory is empty
Directory contains files
Found: data.txt (file)

We use the any() function to check if the iterator contains any entries. The os.scandir() method provides additional information like whether an entry is a file or directory.

Using pathlib Module

The pathlib module provides an object-oriented approach to working with file paths. It's more modern and readable than the traditional os.path methods.

from pathlib import Path
import tempfile

# Create temporary directory
temp_dir = Path(tempfile.mkdtemp())
print(f"Working with: {temp_dir}")

# Check if directory has any files
files = list(temp_dir.iterdir())
if not files:
    print("Directory is empty")
else:
    print(f"Directory contains {len(files)} items")

# Create some files
(temp_dir / "file1.txt").write_text("Content 1")
(temp_dir / "file2.txt").write_text("Content 2")

# Check again
files = list(temp_dir.iterdir())
print(f"Directory now contains {len(files)} items:")
for file in files:
    print(f"  - {file.name}")
Working with: /tmp/tmpxxxxxxxx
Directory is empty
Directory now contains 2 items:
  - file1.txt
  - file2.txt

Comparison of Methods

Method Performance Returns Best For
os.listdir() Good List of names Simple file listing
glob.glob() Good List of paths Pattern matching
os.scandir() Best Iterator of entries Large directories
pathlib Good Path objects Modern, readable code

Conclusion

Use os.scandir() for the best performance, especially with large directories. Use pathlib for modern, readable code. Use os.listdir() for simple cases where you just need file names.

Updated on: 2026-03-27T16:40:05+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements