PATH COMPONENTS - split, dirname, basename, splitext
Python
#!/usr/bin/env python3
"""
PATH COMPONENTS - split, dirname, basename, splitext
Demonstrates parsing path components
"""
import os
print("=" * 60)
print("PATH COMPONENTS - Parsing Paths")
print("=" * 60)
sample_paths = [
"/home/user/documents/file.txt",
"relative/path/to/script.py",
"C:\\Windows\\System32\\notepad.exe",
"/usr/local/bin/python3",
"data.csv",
"/path/to/archive.tar.gz"
]
# Example 1: os.path.basename()
print("\n1. os.path.basename() - Get Filename")
print("-" * 40)
for path in sample_paths[:4]:
basename = os.path.basename(path)
print(f" {path}")
print(f" -> {basename}")
# Example 2: os.path.dirname()
print("\n2. os.path.dirname() - Get Directory")
print("-" * 40)
for path in sample_paths[:4]:
dirname = os.path.dirname(path)
print(f" {path}")
print(f" -> {dirname or '(empty)'}")
# Example 3: os.path.split()
print("\n3. os.path.split() - Split into Dir and File")
print("-" * 40)
for path in sample_paths[:4]:
head, tail = os.path.split(path)
print(f" {path}")
print(f" head: {head or '(empty)'}")
print(f" tail: {tail}")
# Example 4: os.path.splitext()
print("\n4. os.path.splitext() - Split Extension")
print("-" * 40)
for path in [sample_paths[0], sample_paths[1], sample_paths[4], sample_paths[5]]:
name, ext = os.path.splitext(path)
print(f" {os.path.basename(path)}")
print(f" name: {os.path.basename(name)}")
print(f" ext: {ext}")
# Example 5: splitdrive()
print("\n5. os.path.splitdrive() - Split Drive Letter")
print("-" * 40)
paths_with_drive = [
"C:\\Users\\file.txt",
"/home/user/file.txt",
"file.txt"
]
for path in paths_with_drive:
drive, tail = os.path.splitdrive(path)
print(f" {path}")
print(f" drive: '{drive or '(none)'}'")
print(f" path: {tail}")
# Example 6: Get filename without extension
print("\n6. Get Filename Without Extension")
print("-" * 40)
paths = ["document.pdf", "script.py", "archive.tar.gz"]
for path in paths:
name_no_ext = os.path.splitext(os.path.basename(path))[0]
print(f" {path} -> {name_no_ext}")
# Example 7: Get extension only
print("\n7. Get File Extension")
print("-" * 40)
for path in paths:
ext = os.path.splitext(path)[1]
print(f" {path} -> '{ext}'")
# Example 8: Change extension
print("\n8. Change File Extension")
print("-" * 40)
original = "document.txt"
name, _ = os.path.splitext(original)
new_file = name + ".pdf"
print(f" Original: {original}")
print(f" Changed: {new_file}")
# Example 9: Get all path components
print("\n9. Get All Path Components")
print("-" * 40)
path = "/home/user/documents/project/file.txt"
components = []
while True:
path, tail = os.path.split(path)
if tail:
components.insert(0, tail)
else:
if path:
components.insert(0, path)
break
print(f" Path: /home/user/documents/project/file.txt")
print(f" Components: {components}")
# Example 10: Reconstruct path from components
print("\n10. Parse and Reconstruct Path")
print("-" * 40)
original_path = "/home/user/docs/file.txt"
directory = os.path.dirname(original_path)
filename = os.path.basename(original_path)
name, ext = os.path.splitext(filename)
print(f" Original: {original_path}")
print(f" Directory: {directory}")
print(f" Filename: {filename}")
print(f" Name: {name}")
print(f" Extension: {ext}")
reconstructed = os.path.join(directory, name + ext)
print(f" Reconstructed: {reconstructed}")
print(f" Match: {original_path == reconstructed}")
print("\n" + "=" * 60)
print("Key Points:")
print(" - basename() gets filename")
print(" - dirname() gets directory")
print(" - split() splits into (dir, file)")
print(" - splitext() splits into (name, extension)")
print(" - Platform-aware parsing")
print("=" * 60)