Why Should You Learn the os Module?
Learning the os module in Python offers several advantages:
- Makes file handling simple and efficient.
- Creates cross-platform applications.
- Helps automate repetitive tasks.
- Improves project organization.
- Allows secure management of environment variables.
- Simplifies Python scripting and automation projects.
Whether you’re creating backup scripts or organizing thousands of files automatically, the Python os module is one of the most practical tools you’ll use.

Navigating the Filesystem in Python
Before managing files or folders, it’s important to understand where your program is currently running. The Python os module provides functions that make directory navigation straightforward.
Getting the Current Working Directory
The os.getcwd() function returns the absolute path of the directory from which your Python script is executing.
import os
current_dir = os.getcwd()
print(f"Current Working Directory: {current_dir}")Output
Current Working Directory:
/Users/admin/Documents/PythonProjects
This function becomes extremely useful when:
- Reading project files
- Creating reports
- Saving output files
- Building Python automation scripts
Changing Directories
You can move from one folder to another using os.chdir().
import os
# Change directory
os.chdir("/path/to/folder")
# Verify the location
print(os.getcwd())If you’re using Windows, raw strings are recommended:
os.chdir(r"C:\Users\Admin\Projects")
Why Use os.chdir()?
Some common applications include:
- Accessing datasets
- Organizing project folders
- Running automation scripts
- Managing deployment files
The combination of os.getcwd() and os.chdir() forms the foundation of Python directory management.
Managing Files and Folders Using the Python os Module
One of the biggest advantages of the Python os module is its ability to manage files and directories efficiently.
Creating Directories
Python provides two commonly used functions:
os.mkdir()
Creates only a single directory.
import os
os.mkdir("Projects")However, if parent folders do not exist, Python raises an error.
os.makedirs()
Creates multiple nested directories automatically.
import os
os.makedirs("Projects/Python/Data", exist_ok=True)
print("Directories created successfully.")The exist_ok=True parameter prevents Python from throwing an error if the folder already exists.
Why Use os.makedirs()?
It is particularly useful when:
- Creating project structures
- Generating reports automatically
- Building automation pipelines
- Managing datasets
For beginners learning Python filesystem operations, os.makedirs() is usually the safer choice.
Listing Files and Directories
The os.listdir() function returns all files and folders present inside a directory.
import os
contents = os.listdir(".")
print(contents)Example Output
[
'data.csv',
'images',
'project.py',
'report.pdf'
]
This function is commonly used for:
- File organization scripts
- Data processing pipelines
- Folder management systems
- Backup automation
Displaying Files Only
You can combine os.listdir() with os.path.isfile().
import os
files = [
f for f in os.listdir(".")
if os.path.isfile(f)
]
print(files)Output:
['data.csv', 'report.pdf']
Similarly, you can display directories only.
folders = [
f for f in os.listdir(".")
if os.path.isdir(f)
]
print(folders)This approach is widely used in Python file handling using the os module.
Renaming Files and Folders
The os.rename() function allows you to rename both files and directories.
import os
os.rename(
"old_notes.txt",
"new_notes.txt"
)
print("File renamed successfully.")It can also move files between locations.
os.rename(
"report.pdf",
"Archive/report.pdf"
)
This feature becomes extremely useful while building:
- Backup systems
- Log management tools
- Automated file organizers
- Data migration scripts
Deleting Files and Empty Directories
To remove files, Python provides os.remove().
import os
os.remove("sample.txt")To remove empty folders:
import os
os.rmdir("EmptyFolder")Important Note: os.rmdir() works only when the directory is empty.
Attempting to delete non-empty folders will raise an error. For such cases, Python’s shutil.rmtree() function is recommended.
import shutil
shutil.rmtree("ProjectFiles")Always verify the file path before deleting important data.
Best Practices for File Operations
While performing Python filesystem operations, remember the following practices:
- Always check whether files exist before deleting them.
- Prefer
os.makedirs() over os.mkdir() for nested folders. - Use
os.path functions instead of manually writing file paths. - Avoid hardcoding directory separators.
- Use exception handling for safer programs.
These practices make your code easier to maintain and improve cross-platform compatibility.
Exploring Directory Trees with os.walk()
When working on large projects, simply listing the files inside a single folder isn’t always enough. You may need to search through multiple directories and their subfolders to locate files, generate reports, or organize data automatically. This is where os.walk() becomes incredibly useful.
The os.walk() function recursively traverses an entire directory structure and returns three values for every folder it visits:
root – The path of the current directory.dirs – A list of all subdirectories within the current directory.files – A list of all files present in the current directory.
Syntax
import os
for root, dirs, files in os.walk("project"):
print(root)Example: Scanning All Files
import os
for root, dirs, files in os.walk("project"):
print(f"\nCurrent Directory: {root}")
for file in files:
print(f"Found File: {file}")Sample Output
Current Directory: project
Found File: README.md
Current Directory: project/data
Found File: users.csv
Found File: products.csv
Current Directory: project/images
Found File: logo.png
Practical Applications of os.walk()
The Python os walk example is commonly used for:
- Finding duplicate files.
- Building file management systems.
- Creating backup utilities.
- Organizing datasets automatically.
- Searching project directories.
- Generating reports from folders and subfolders.
For developers building Python automation scripts, os.walk() can save a tremendous amount of time when processing large file structures.

Working with Environment Variables in Python
Modern applications rarely store sensitive information such as API keys or database credentials directly inside the source code. Instead, developers use environment variables for improved security and flexibility.
The Python os module allows you to access these values using os.environ.
Reading Environment Variables
import os
api_key = os.environ.get(
"SECRET_API_KEY",
"Default_Value"
)
print(api_key)Using os.environ.get() is recommended because it safely returns a default value when the variable doesn’t exist.
Setting Environment Variables
import os
os.environ["APP_MODE"] = "Production"
print(os.environ["APP_MODE"])
Why Use Environment Variables?
They are useful for storing:
- API keys
- Database passwords
- Application configurations
- Deployment settings
- Server credentials
Using environment variables improves both security and code portability.
Example
Instead of writing:
DATABASE_PASSWORD = "123456"
A better approach is:
import os
DATABASE_PASSWORD = os.environ.get(
"DATABASE_PASSWORD"
)This keeps sensitive information outside your source code and follows industry best practices.
Working with File Paths Using os.path
File paths differ across operating systems. Windows uses backslashes (\) while Linux and macOS use forward slashes (/). Hardcoding these separators can lead to compatibility issues.
The Python os.path module solves this problem by automatically handling platform-specific path formats.
Combining Paths Safely
Instead of:
path = "Reports/" + "sales.csv"
Use:
import os
path = os.path.join(
"Reports",
"sales.csv"
)
print(path)Python automatically generates the correct path format for your operating system.
Checking Whether a Path Exists
import os
if os.path.exists("config.json"):
print("File exists.")This function is useful before:
- Reading files
- Deleting folders
- Processing datasets
- Performing backups
Checking Whether It’s a File
import os
if os.path.isfile("report.pdf"):
print("This is a file.")Checking Whether It’s a Directory
import os
if os.path.isdir("Projects"):
print("This is a folder.")These functions significantly improve Python file handling and reduce runtime errors.
Splitting File Paths
The os.path.split() function separates a path into two parts.
import os
path = "/Users/Admin/report.pdf"
head, tail = os.path.split(path)
print(head)
print(tail)
Output
/Users/Admin
report.pdf
This is particularly useful when organizing files dynamically.
Getting File Extensions
import os
name, extension = os.path.splitext(
"resume.pdf"
)
print(name)
print(extension)Output
resume
.pdf
Developers frequently use this technique for:
- File validation
- Upload systems
- Image processing applications
- Document management tools
pathlib vs os Module in Python
Python introduced the pathlib module in version 3.4 as a modern alternative for path manipulation.
Using os.path
import os
path = os.path.join(
"src",
"data",
"users.csv"
)Using pathlib
from pathlib import Path
path = Path("src") / "data" / "users.csv"
print(path.exists())Which One Should You Use?
| os Module | pathlib Module |
| Procedural approach | Object-oriented approach |
| Widely used | Cleaner syntax |
| Excellent for system operations | Excellent for path manipulation |
| Beginner-friendly | Modern and intuitive |
Although pathlib is becoming increasingly popular, the Python os module remains indispensable for filesystem operations and operating system interactions.
Many developers use both modules together in real-world applications.
Summary Cheat Sheet
| Task | Function |
| Get current directory | os.getcwd() |
| Change directories | os.chdir() |
| Create folders | os.mkdir() |
| Create nested folders | os.makedirs() |
| List directory contents | os.listdir() |
| Scan directories recursively | os.walk() |
| Rename files | os.rename() |
| Delete files | os.remove() |
| Delete empty folders | os.rmdir() |
| Access environment variables | os.environ.get() |
| Join paths safely | os.path.join() |
| Check file existence | os.path.exists() |
| Check files | os.path.isfile() |
| Check directories | os.path.isdir() |
| Split paths | os.path.split() |
| Get file extensions | os.path.splitext() |
Best Practices for Using the Python os Module
Follow these practices to write cleaner and safer programs:
- Prefer
os.makedirs() when creating nested directories. - Always verify whether files exist before deleting them.
- Use
os.path.join() instead of manually concatenating paths. - Store sensitive information inside environment variables.
- Handle exceptions while performing file operations.
- Use
os.walk() when working with large directory structures. - Combine the os module with pathlib whenever appropriate.
These practices improve portability, maintainability, and security across Python projects.
Conclusion
The Python os module is one of the most practical and powerful libraries available in Python. From navigating directories and managing files to working with environment variables and safely manipulating file paths, it provides everything required for building robust and cross-platform applications.
Whether you’re learning Python programming or developing automation scripts for production environments, mastering the os module in Python will significantly improve your ability to interact with the operating system efficiently.
By understanding functions such as os.walk(), os.path.join(), and os.environ.get(), you’ll be able to write cleaner, more secure, and highly maintainable Python applications.
