Skip to content

LISTING DIRECTORY CONTENTS - Using os.listdir()

Python
#!/usr/bin/env python3
"""
LISTING DIRECTORY CONTENTS - Using os.listdir()
Demonstrates various ways to list files and directories
"""

import os
import tempfile

print("=" * 60)
print("LISTING DIRECTORY CONTENTS - os.listdir()")
print("=" * 60)

temp_dir = tempfile.gettempdir()
test_dir = os.path.join(temp_dir, "listdir_demo")

# Create test directory structure
os.makedirs(test_dir, exist_ok=True)

# Create sample files and subdirectories
files_to_create = ["file1.txt", "file2.py", "file3.log", ".hidden"]
dirs_to_create = ["subdir1", "subdir2", ".hidden_dir"]

for filename in files_to_create:
    filepath = os.path.join(test_dir, filename)
    with open(filepath, 'w') as f:
        f.write(f"Content of {filename}\n")

for dirname in dirs_to_create:
    os.makedirs(os.path.join(test_dir, dirname), exist_ok=True)

print(f"Created test directory: {test_dir}\n")

# Example 1: Basic listdir()
print("1. Basic os.listdir()")
print("-" * 40)
items = os.listdir(test_dir)
print(f"Found {len(items)} items:")
for item in sorted(items):
    print(f"  {item}")

# Example 2: Separate files and directories
print("\n2. Separate Files and Directories")
print("-" * 40)
files = []
directories = []

for item in os.listdir(test_dir):
    full_path = os.path.join(test_dir, item)
    if os.path.isfile(full_path):
        files.append(item)
    elif os.path.isdir(full_path):
        directories.append(item)

print(f"Files ({len(files)}):")
for f in sorted(files):
    print(f"  {f}")

print(f"\nDirectories ({len(directories)}):")
for d in sorted(directories):
    print(f"  {d}/")

# Example 3: Filter by extension
print("\n3. Filter by File Extension")
print("-" * 40)
extensions = {'.txt': [], '.py': [], '.log': []}

for item in os.listdir(test_dir):
    full_path = os.path.join(test_dir, item)
    if os.path.isfile(full_path):
        ext = os.path.splitext(item)[1]
        if ext in extensions:
            extensions[ext].append(item)

for ext, file_list in extensions.items():
    if file_list:
        print(f"{ext} files:")
        for f in file_list:
            print(f"  {f}")

# Example 4: Include hidden files
print("\n4. Hidden Files (Starting with '.')")
print("-" * 40)
all_items = os.listdir(test_dir)
hidden_items = [item for item in all_items if item.startswith('.')]
visible_items = [item for item in all_items if not item.startswith('.')]

print(f"Visible items ({len(visible_items)}):")
for item in sorted(visible_items):
    print(f"  {item}")

print(f"\nHidden items ({len(hidden_items)}):")
for item in sorted(hidden_items):
    print(f"  {item}")

# Example 5: List with full paths
print("\n5. List with Full Paths")
print("-" * 40)
full_paths = [os.path.join(test_dir, item) for item in os.listdir(test_dir)]
print("Full paths (first 5):")
for path in sorted(full_paths)[:5]:
    print(f"  {path}")

# Example 6: Get file sizes
print("\n6. List Files with Sizes")
print("-" * 40)
for item in sorted(os.listdir(test_dir)):
    full_path = os.path.join(test_dir, item)
    if os.path.isfile(full_path):
        size = os.path.getsize(full_path)
        print(f"  {item:20s} {size:>6} bytes")

# Example 7: Count items by type
print("\n7. Count Items by Type")
print("-" * 40)
counts = {'files': 0, 'directories': 0, 'other': 0}

for item in os.listdir(test_dir):
    full_path = os.path.join(test_dir, item)
    if os.path.isfile(full_path):
        counts['files'] += 1
    elif os.path.isdir(full_path):
        counts['directories'] += 1
    else:
        counts['other'] += 1

for item_type, count in counts.items():
    print(f"  {item_type.capitalize()}: {count}")

# Example 8: List sorted by modification time
print("\n8. Sort by Modification Time")
print("-" * 40)
items_with_time = []
for item in os.listdir(test_dir):
    full_path = os.path.join(test_dir, item)
    mtime = os.path.getmtime(full_path)
    items_with_time.append((item, mtime))

items_with_time.sort(key=lambda x: x[1], reverse=True)

print("Most recently modified (first 5):")
for item, _ in items_with_time[:5]:
    print(f"  {item}")

# Example 9: List comprehension patterns
print("\n9. List Comprehension Patterns")
print("-" * 40)

# Only .txt files
txt_files = [f for f in os.listdir(test_dir)
             if f.endswith('.txt') and os.path.isfile(os.path.join(test_dir, f))]
print(f"Text files: {txt_files}")

# Only directories
subdirs = [d for d in os.listdir(test_dir)
           if os.path.isdir(os.path.join(test_dir, d))]
print(f"Subdirectories: {subdirs}")

# Example 10: Empty directory check
print("\n10. Check if Directory is Empty")
print("-" * 40)
if os.listdir(test_dir):
    print(f"  Directory is NOT empty ({len(os.listdir(test_dir))} items)")
else:
    print("  Directory is empty")

# Cleanup
import shutil
shutil.rmtree(test_dir)

print("\n" + "=" * 60)
print("Key Points:")
print("  - os.listdir() returns list of names")
print("  - Does not include '.' and '..'")
print("  - Returns basenames, not full paths")
print("  - Does not recurse into subdirectories")
print("  - Order is arbitrary (use sorted())")
print("=" * 60)