Unit 7 • Lesson 5

Working with File Paths

Overview

File locations can differ between systems, so it's important to manage paths correctly. This lesson covers using the os and pathlib modules to create, join, and navigate directories safely and consistently, ensuring cross-platform compatibility.

Intermediate 20–25 min

What You Will Learn in This Lesson

By the end of this lesson, you will know:

  • Relative vs absolute paths: Understand the difference and when to use each.
  • Path joining: Use os.path.join() to build paths correctly.
  • The pathlib module: Learn modern Python's preferred way to handle paths.
  • Cross-platform compatibility: Write code that works on Windows, Mac, and Linux.
  • Path operations: Check if files exist, get directory names, and more.

Relative vs Absolute Paths

A file path tells Python where to find a file on your computer. There are two types:

Relative Path

Relative to where your program is running. Starts from the current directory.

"data.txt"
"folder/file.txt"
"../parent.txt"

Absolute Path

Complete path from the root of the file system. Works from anywhere.

"/Users/name/data.txt"
"C:\\Users\\name\\data.txt"
"/home/user/data.txt"

When to Use Each

  • Use relative paths: When files are in the same project folder
  • Use absolute paths: When you need to access files in specific system locations

Using os.path.join()

The os.path.join() function safely combines path parts, using the correct separator for your operating system.

Joining Paths
import os

# Instead of this (WRONG):
path = "folder" + "/" + "file.txt"  # Only works on Mac/Linux

# Do this (RIGHT):
path = os.path.join("folder", "file.txt")  # Works everywhere!

Why Use os.path.join()?

  • Windows uses \ (backslash)
  • Mac/Linux use / (forward slash)
  • os.path.join() automatically uses the right one!
Multiple Path Parts
import os

path = os.path.join("users", "alice", "documents", "file.txt")
# Result: "users/alice/documents/file.txt" (Mac/Linux)
# Result: "users\\alice\\documents\\file.txt" (Windows)

The pathlib Module (Modern Python)

Python 3.4+ introduced pathlib, which provides an object-oriented way to work with paths. It's the recommended modern approach.

Using pathlib.Path
from pathlib import Path

# Create a Path object
file_path = Path("folder") / "file.txt"

# Open the file
with open(file_path, "r") as file:
    content = file.read()

pathlib Benefits

  • More readable code
  • Cross-platform by default
  • Many useful methods built-in
  • Python's recommended way
pathlib Methods
from pathlib import Path

path = Path("folder/file.txt")

print(path.exists())      # Check if file exists
print(path.name)          # "file.txt"
print(path.parent)        # "folder"
print(path.suffix)        # ".txt"
print(path.stem)          # "file"

Common Path Operations

Both os.path and pathlib provide methods for common path operations:

Operation os.path pathlib
Join paths os.path.join("a", "b") Path("a") / "b"
Check if exists os.path.exists(path) Path(path).exists()
Get filename os.path.basename(path) Path(path).name
Get directory os.path.dirname(path) Path(path).parent
Get file extension os.path.splitext(path)[1] Path(path).suffix
Get file stem (name without extension) os.path.splitext(path)[0] Path(path).stem
Check if file os.path.isfile(path) Path(path).is_file()
Check if directory os.path.isdir(path) Path(path).is_dir()
More pathlib Examples
from pathlib import Path

file_path = Path("documents/report.pdf")

# Get different parts
print(file_path.name)        # "report.pdf"
print(file_path.stem)        # "report"
print(file_path.suffix)      # ".pdf"
print(file_path.parent)      # "documents"
print(file_path.parts)       # ("documents", "report.pdf")

# Check properties
print(file_path.exists())    # True/False
print(file_path.is_file())   # True/False
print(file_path.is_dir())    # True/False

# Create new paths
new_path = file_path.parent / "backup" / file_path.name
print(new_path)  # "documents/backup/report.pdf"

pathlib Advantages

pathlib is more intuitive and Pythonic:

  • Object-oriented approach
  • More readable code
  • Method chaining: Path("data").parent / "backup" / "file.txt"
  • Cross-platform by default
  • Many convenient methods

Practice: Working with Paths

Try It Yourself

Try using pathlib to work with file paths:

Click "Run Code" to see your output here

What happened? You created a Path object and accessed its properties. The / operator joins paths automatically.

Summary

In this lesson, you learned:

  • Relative paths: Relative to current directory - use for project files
  • Absolute paths: Complete system path - use for system files
  • os.path.join(): Safe way to join paths (works everywhere)
  • pathlib: Modern, object-oriented path handling
  • Cross-platform: Always use these tools instead of hardcoding separators

Remember

Never use hardcoded / or \ in paths. Always use os.path.join() or pathlib for cross-platform compatibility!

End-of-Lesson Exercises

Think about these questions to reinforce what you've learned:

Exercise 1: Path Types

What's the difference between a relative path and an absolute path? When would you use each?

Exercise 2: Cross-Platform

Why is it important to use os.path.join() or pathlib instead of hardcoding path separators?