How to check the permissions of a file using Python?

File permissions in Python determine who can read, write, or execute a file. Python's os module provides several functions to check these permissions, including os.access() and os.stat(). Understanding file permissions is crucial for security and access control in Python applications.

Why Check File Permissions?

File permission checks are important for several reasons:

  • Control access to sensitive files and prevent unauthorized modifications

  • Protect data integrity and confidentiality

  • Enforce user-level security with different access levels

  • Detect unauthorized changes to file permissions

  • Minimize risk of data breaches in applications

Using os.access() Function

The os.access() function checks if the current process can access a file with specific permissions. It returns True if access is granted, False otherwise.

Example

import os

def check_file_permissions(file_path):
    # Create a test file for demonstration
    with open("test_file.txt", "w") as f:
        f.write("This is a test file.")
    
    file_path = "test_file.txt"
    
    if os.access(file_path, os.R_OK):
        print(f"Read permission granted for: {file_path}")
    else:
        print(f"Read permission denied for: {file_path}")
    
    if os.access(file_path, os.W_OK):
        print(f"Write permission granted for: {file_path}")
    else:
        print(f"Write permission denied for: {file_path}")
    
    if os.access(file_path, os.X_OK):
        print(f"Execute permission granted for: {file_path}")
    else:
        print(f"Execute permission denied for: {file_path}")

check_file_permissions("test_file.txt")
Read permission granted for: test_file.txt
Write permission granted for: test_file.txt
Execute permission denied for: test_file.txt

Using the stat Module

The stat module provides constants for checking specific permission bits using bitwise operations with os.stat().

Example

import os
import stat

def check_owner_permissions(file_path):
    # Create a test file
    with open("test_file.txt", "w") as f:
        f.write("This is a test file.")
    
    file_path = "test_file.txt"
    file_stat = os.stat(file_path)
    file_mode = file_stat.st_mode
    
    if stat.S_IRUSR & file_mode:
        print(f"Owner has read permission: {file_path}")
    else:
        print(f"Owner lacks read permission: {file_path}")
    
    if stat.S_IWUSR & file_mode:
        print(f"Owner has write permission: {file_path}")
    else:
        print(f"Owner lacks write permission: {file_path}")
    
    if stat.S_IXUSR & file_mode:
        print(f"Owner has execute permission: {file_path}")
    else:
        print(f"Owner lacks execute permission: {file_path}")

check_owner_permissions("test_file.txt")
Owner has read permission: test_file.txt
Owner has write permission: test_file.txt
Owner lacks execute permission: test_file.txt

Using pathlib Module

The pathlib module provides an object-oriented approach to file paths, which can be combined with os.access() for permission checks.

Example

import os
from pathlib import Path

def check_permissions_with_pathlib(file_path):
    # Create a test file
    with open("test_file.txt", "w") as f:
        f.write("This is a test file.")
    
    file_path = "test_file.txt"
    file = Path(file_path)
    
    if file.is_file():
        print(f"Checking permissions for: {file_path}")
        
        permissions = []
        if os.access(file_path, os.R_OK):
            permissions.append("Read")
        if os.access(file_path, os.W_OK):
            permissions.append("Write")
        if os.access(file_path, os.X_OK):
            permissions.append("Execute")
        
        print(f"Available permissions: {', '.join(permissions)}")
    else:
        print(f"Path is not a file: {file_path}")

check_permissions_with_pathlib("test_file.txt")
Checking permissions for: test_file.txt
Available permissions: Read, Write

Comprehensive Permission Check

This example combines file existence checks with permission verification for a more robust solution ?

import os

def comprehensive_permission_check(file_path):
    # Create a test file
    with open("test_file.txt", "w") as f:
        f.write("This is a test file with some content.")
    
    file_path = "test_file.txt"
    
    if os.path.isfile(file_path):
        if os.path.exists(file_path) and os.path.getsize(file_path) > 0:
            print(f"File exists and has content: {file_path}")
            
            # Check all permissions at once
            all_permissions = os.access(file_path, os.R_OK | os.W_OK | os.X_OK)
            if all_permissions:
                print("File has read, write, and execute permissions")
            else:
                print("File does not have all permissions")
                
            # Individual permission checks
            if os.access(file_path, os.R_OK):
                print("? Read permission available")
            if os.access(file_path, os.W_OK):
                print("? Write permission available")
            if not os.access(file_path, os.X_OK):
                print("? Execute permission not available")
        else:
            print(f"File does not exist or is empty: {file_path}")
    else:
        print(f"Path does not point to a file: {file_path}")

comprehensive_permission_check("test_file.txt")
File exists and has content: test_file.txt
File does not have all permissions
? Read permission available
? Write permission available
? Execute permission not available

Permission Constants

Python provides several constants for checking different types of permissions ?

Constant Description Purpose
os.R_OK Read permission Check if file can be read
os.W_OK Write permission Check if file can be written
os.X_OK Execute permission Check if file can be executed
os.F_OK File existence Check if file exists

Conclusion

Python provides multiple approaches to check file permissions using os.access(), os.stat() with the stat module, and pathlib. Choose os.access() for simple permission checks and the stat module for detailed permission analysis. Proper permission checking enhances application security and prevents unauthorized file access.

Updated on: 2026-03-24T17:24:08+05:30

14K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements