CREATING DIRECTORIES - Using os.mkdir() and os.makedirs()
Python
#!/usr/bin/env python3
"""
CREATING DIRECTORIES - Using os.mkdir() and os.makedirs()
Demonstrates directory creation with various options
"""
import os
import tempfile
print("=" * 60)
print("CREATING DIRECTORIES - os.mkdir() and os.makedirs()")
print("=" * 60)
temp_dir = tempfile.gettempdir()
base_dir = os.path.join(temp_dir, "mkdir_demo")
# Clean up if exists
import shutil
if os.path.exists(base_dir):
shutil.rmtree(base_dir)
os.makedirs(base_dir)
print(f"Created base directory: {base_dir}\n")
# Example 1: Basic os.mkdir()
print("1. Basic os.mkdir() - Single Directory")
print("-" * 40)
dir1 = os.path.join(base_dir, "simple_dir")
os.mkdir(dir1)
print(f" Created: {dir1}")
print(f" Exists: {os.path.exists(dir1)}")
print(f" Is directory: {os.path.isdir(dir1)}")
# Example 2: Create with specific permissions
print("\n2. Create with Permissions (mode)")
print("-" * 40)
dir2 = os.path.join(base_dir, "perms_dir")
os.mkdir(dir2, mode=0o755) # rwxr-xr-x
print(f" Created: {dir2}")
stat_info = os.stat(dir2)
print(f" Mode: {oct(stat_info.st_mode)}")
# Example 3: os.makedirs() - Create parent directories
print("\n3. os.makedirs() - Create Parent Directories")
print("-" * 40)
nested_dir = os.path.join(base_dir, "parent", "child", "grandchild")
os.makedirs(nested_dir)
print(f" Created nested path: {nested_dir}")
print(" Created intermediate directories:")
print(f" - parent/")
print(f" - parent/child/")
print(f" - parent/child/grandchild/")
# Example 4: makedirs with exist_ok
print("\n4. makedirs() with exist_ok=True")
print("-" * 40)
existing_dir = os.path.join(base_dir, "existing")
os.makedirs(existing_dir)
print(f" Created: {existing_dir}")
# Try to create again
try:
os.makedirs(existing_dir)
print(" ERROR: Should have raised FileExistsError")
except FileExistsError:
print(" Without exist_ok: FileExistsError raised")
# With exist_ok=True
os.makedirs(existing_dir, exist_ok=True)
print(" With exist_ok=True: No error")
# Example 5: Create multiple directories
print("\n5. Create Multiple Directories")
print("-" * 40)
dir_names = ["logs", "data", "config", "temp"]
for dirname in dir_names:
dir_path = os.path.join(base_dir, dirname)
os.mkdir(dir_path)
print(f" Created: {dirname}/")
# Example 6: Create directory structure
print("\n6. Create Complex Directory Structure")
print("-" * 40)
structure = [
"project/src",
"project/tests",
"project/docs",
"project/bin"
]
for path in structure:
full_path = os.path.join(base_dir, path)
os.makedirs(full_path, exist_ok=True)
print(f" Created: {path}/")
# Example 7: Error handling
print("\n7. Error Handling")
print("-" * 40)
# Try to create where file exists
file_path = os.path.join(base_dir, "not_a_dir.txt")
with open(file_path, 'w') as f:
f.write("test")
try:
os.mkdir(file_path)
except FileExistsError:
print(" Cannot create directory: file exists with same name")
# Try to create in non-existent parent
try:
os.mkdir(os.path.join(base_dir, "nonexistent", "child"))
except FileNotFoundError:
print(" os.mkdir() fails if parent doesn't exist")
# Example 8: Verify creation
print("\n8. Verify Directory Creation")
print("-" * 40)
verify_dir = os.path.join(base_dir, "verify_me")
print(f" Before: exists = {os.path.exists(verify_dir)}")
os.mkdir(verify_dir)
print(f" After: exists = {os.path.exists(verify_dir)}")
print(f" Is directory: {os.path.isdir(verify_dir)}")
print(f" Is file: {os.path.isfile(verify_dir)}")
# Example 9: Create dated directories
print("\n9. Create Dated Directories")
print("-" * 40)
from datetime import datetime
backup_base = os.path.join(base_dir, "backups")
os.makedirs(backup_base, exist_ok=True)
dates = ["2024-01-01", "2024-01-02", "2024-01-03"]
for date in dates:
date_dir = os.path.join(backup_base, date)
os.mkdir(date_dir)
print(f" Created: backups/{date}/")
# Example 10: Create user directory structure
print("\n10. Create User Home Directory Structure")
print("-" * 40)
user_dir = os.path.join(base_dir, "user_home")
user_subdirs = [
"Documents",
"Downloads",
"Pictures",
"Videos",
"Music",
".config"
]
os.makedirs(user_dir, exist_ok=True)
for subdir in user_subdirs:
os.mkdir(os.path.join(user_dir, subdir))
print(f" Created: user_home/{subdir}/")
# Example 11: List all created directories
print("\n11. Show Full Directory Tree")
print("-" * 40)
def print_tree(directory, prefix="", max_depth=3, current_depth=0):
"""Print directory tree"""
if current_depth >= max_depth:
return
try:
items = sorted(os.listdir(directory))
dirs = [item for item in items if os.path.isdir(os.path.join(directory, item))]
for i, dirname in enumerate(dirs):
is_last = i == len(dirs) - 1
print(f"{prefix}{'└── ' if is_last else '├── '}{dirname}/")
new_prefix = prefix + (" " if is_last else "│ ")
print_tree(os.path.join(directory, dirname), new_prefix, max_depth, current_depth + 1)
except PermissionError:
pass
print(f" {os.path.basename(base_dir)}/")
print_tree(base_dir, " ", max_depth=2)
# Cleanup
shutil.rmtree(base_dir)
print("\n" + "=" * 60)
print("Key Points:")
print(" - os.mkdir() creates single directory")
print(" - os.makedirs() creates parent directories")
print(" - Use exist_ok=True to avoid errors")
print(" - Set permissions with mode parameter")
print(" - Parent directory must exist for mkdir()")
print("=" * 60)