Using the os Module for File and Directory Management

The os (Operating System) module provides a way to interact with the operating system. It is very useful for tasks such as creating, deleting, renaming files and directories, checking their existence, and obtaining information about them.

import os

# --- Current Directory ---
print(f"Current working directory: {os.getcwd()}")

# --- Creating and Removing Directories ---
new_directory = "my_new_folder"
if not os.path.exists(new_directory):
    os.makedirs(new_directory)  # Creates directory and any necessary intermediate directories
    print(f"Directory '{new_directory}' created.")
else:
    print(f"Directory '{new_directory}' already exists.")

# Creating a file inside the new directory
file_in_folder = os.path.join(new_directory, "data.txt")
with open(file_in_folder, 'w') as f:
    f.write("This is some data.")
print(f"File '{file_in_folder}' created.")

# List contents of a directory
print(f"Contents of '{os.getcwd()}': {os.listdir('.')}")  # '.' refers to current directory
print(f"Contents of '{new_directory}': {os.listdir(new_directory)}")

# Renaming a file
old_file_name = file_in_folder
new_file_name = os.path.join(new_directory, "renamed_data.txt")
os.rename(old_file_name, new_file_name)
print(f"File renamed from '{old_file_name}' to '{new_file_name}'.")

# Renaming a directory
old_dir_name = new_directory
new_dir_name = "my_renamed_folder"
os.rename(old_dir_name, new_dir_name)
print(f"Directory renamed from '{old_dir_name}' to '{new_dir_name}'.")

# Getting file/directory information
if os.path.exists(new_dir_name):
    print(f"Is '{new_dir_name}' a directory? {os.path.isdir(new_dir_name)}")
    print(f"Is '{new_dir_name}' a file? {os.path.isfile(new_dir_name)}")
    # To get info about the file inside
    file_path = os.path.join(new_dir_name, "renamed_data.txt")
    if os.path.exists(file_path):
        file_stats = os.stat(file_path)
        print(f"File size of '{file_path}': {file_stats.st_size} bytes")
        print(f"Last modification time (timestamp): {file_stats.st_mtime}")

# Deleting a file
file_to_delete = os.path.join(new_dir_name, "renamed_data.txt")
if os.path.exists(file_to_delete):
    os.remove(file_to_delete)
    print(f"File '{file_to_delete}' deleted.")

# Deleting an empty directory
if os.path.exists(new_dir_name) and not os.listdir(new_dir_name):  # Check if empty
    os.rmdir(new_dir_name)
    print(f"Directory '{new_dir_name}' deleted.")
else:
    print(f"Directory '{new_dir_name}' is not empty or does not exist, cannot delete with rmdir.")

# If you need to remove a non-empty directory and its contents, use shutil.rmtree
import shutil
if not os.path.exists("folder_to_remove"):
    os.makedirs("folder_to_remove/subfolder")
    with open("folder_to_remove/subfolder/test.txt", "w") as f:
        f.write("temp content")
    print("Created 'folder_to_remove' for shutil.rmtree example.")

if os.path.exists("folder_to_remove"):
    shutil.rmtree("folder_to_remove")
    print("Directory 'folder_to_remove' and its contents removed using shutil.rmtree.")