Skip to main content
  1. Python Programming/

Automating Your Daily Tasks with Python: Real-World Examples

·2036 words·10 mins·
Python Automation Productivity Scripting Task Automation
Ifarra
Author
Ifarra
Disturbing the peace!!
Table of Contents

Automating Your Daily Tasks with Python: Real-World Examples
#

In today’s fast-paced world, time is a precious commodity. Many of us find ourselves bogged down by repetitive tasks that consume valuable time and energy. Fortunately, Python, with its simplicity and extensive libraries, offers a powerful solution for automating these tasks, freeing you to focus on more important and engaging work.

This article will explore several real-world examples of how you can use Python to automate your daily routine. We’ll cover tasks ranging from simple file management to more complex data manipulation and web interactions.

Why Python for Automation?
#

  • Ease of Use: Python’s clear and concise syntax makes it easy to learn and write scripts, even for beginners.
  • Extensive Libraries: Python boasts a vast ecosystem of libraries specifically designed for automation, such as os, shutil, datetime, requests, Beautiful Soup, and Selenium.
  • Cross-Platform Compatibility: Python scripts can run seamlessly on Windows, macOS, and Linux, making it a versatile choice for automation.
  • Large Community Support: A thriving community provides ample resources, tutorials, and support for troubleshooting and learning.

Example 1: Automating File Management
#

One of the most common applications of Python automation is managing files and folders. Let’s look at some common file management tasks:

1. Organizing Files by Extension:

Imagine you have a folder filled with various file types (images, documents, spreadsheets) and you want to organize them into separate folders based on their extensions. Here’s a Python script to achieve this:

import os
import shutil

def organize_files(directory):
    """Organizes files in a directory by extension into subfolders."""
    for filename in os.listdir(directory):
        if os.path.isfile(os.path.join(directory, filename)):
            extension = filename.split('.')[-1].lower()  # Extract file extension
            extension_folder = os.path.join(directory, extension)

            if not os.path.exists(extension_folder):
                os.makedirs(extension_folder) # Create the folder if it doesn't exist

            source_path = os.path.join(directory, filename)
            destination_path = os.path.join(extension_folder, filename)

            try:
                shutil.move(source_path, destination_path)
                print(f"Moved '{filename}' to '{extension_folder}'")
            except Exception as e:
                print(f"Error moving '{filename}': {e}")

# Specify the directory to organize
directory_to_organize = "/path/to/your/folder"  # Replace with your actual path
organize_files(directory_to_organize)

Explanation:

  • The os module is used to interact with the operating system, allowing us to list files, check their type, and create directories.
  • The shutil module provides functions for moving files and directories.
  • The script iterates through each file in the specified directory.
  • It extracts the file extension and creates a subfolder with that name (if it doesn’t already exist).
  • Finally, it moves the file to the corresponding extension folder.
  • Error handling is included to catch potential issues during file movement.

2. Renaming Multiple Files:

Another common task is renaming multiple files according to a specific pattern. For example, you might want to add a date prefix to all files in a folder.

import os
import datetime

def rename_files_with_date(directory):
    """Renames files in a directory by adding a date prefix."""
    date_prefix = datetime.date.today().strftime("%Y%m%d")
    for filename in os.listdir(directory):
        if os.path.isfile(os.path.join(directory, filename)):
            new_filename = f"{date_prefix}_{filename}"
            old_path = os.path.join(directory, filename)
            new_path = os.path.join(directory, new_filename)

            try:
                os.rename(old_path, new_path)
                print(f"Renamed '{filename}' to '{new_filename}'")
            except Exception as e:
                print(f"Error renaming '{filename}': {e}")

# Specify the directory to rename files in
directory_to_rename = "/path/to/your/folder" # Replace with your actual path
rename_files_with_date(directory_to_rename)

Explanation:

  • The datetime module is used to get the current date in the desired format.
  • The script iterates through each file in the specified directory.
  • It creates a new filename by adding the date prefix to the original filename.
  • The os.rename() function renames the file.
  • Error handling is included to catch potential issues during renaming.

Example 2: Automating Web Interactions (Web Scraping)
#

Python is a powerful tool for extracting data from websites. The requests library allows you to fetch web pages, and Beautiful Soup helps you parse the HTML content.

Scraping Product Prices from an E-commerce Website:

Let’s say you want to track the prices of specific products on an e-commerce website. Here’s a basic example:

import requests
from bs4 import BeautifulSoup

def scrape_product_price(url, element_selector):
    """Scrapes the price of a product from a given URL using CSS selectors."""
    try:
        response = requests.get(url)
        response.raise_for_status()  # Raise HTTPError for bad responses (4xx or 5xx)

        soup = BeautifulSoup(response.content, 'html.parser')
        price_element = soup.select_one(element_selector) # Use CSS selector to find the price element

        if price_element:
            price = price_element.text.strip()
            return price
        else:
            return "Price not found."

    except requests.exceptions.RequestException as e:
        return f"Request error: {e}"
    except Exception as e:
        return f"Error: {e}"


# Specify the URL of the product page and the CSS selector for the price element. **IMPORTANT:  These will vary depending on the website!**
product_url = "https://www.example.com/product/123"  # Replace with the actual URL
price_selector = ".product-price"  # Replace with the correct CSS selector

price = scrape_product_price(product_url, price_selector)
print(f"The product price is: {price}")

Explanation:

  • The requests.get() function fetches the HTML content of the specified URL.
  • response.raise_for_status() checks if the request was successful (status code 200). If not, it raises an exception.
  • BeautifulSoup parses the HTML content, creating a navigable tree structure.
  • The soup.select_one(element_selector) method uses a CSS selector to find the HTML element containing the product price. Finding the correct CSS selector is crucial and requires inspecting the website’s HTML source code. Use your browser’s developer tools (usually accessed by pressing F12) to identify the appropriate selector.
  • The script extracts the text content of the price element and returns it.
  • Error handling is included to catch potential network errors and parsing errors.

Important Considerations for Web Scraping:

  • Respect robots.txt: Always check the website’s robots.txt file (e.g., https://www.example.com/robots.txt) to see which parts of the site are disallowed for scraping.
  • Avoid Overloading the Server: Implement delays in your script to avoid making too many requests in a short period, which could overload the website’s server. Use time.sleep() to introduce pauses.
  • Website Structure Changes: Websites frequently change their structure, which can break your scraping scripts. You’ll need to monitor your scripts and update the CSS selectors or other parsing logic as needed.
  • Terms of Service: Always review the website’s terms of service to ensure that scraping is permitted. Some websites explicitly prohibit scraping.
  • Use an API When Available: If the website provides an official API, using it is almost always the better option than scraping, as it’s more reliable and less likely to break due to website changes.

Example 3: Sending Automated Emails
#

Python can be used to send automated emails for various purposes, such as sending reminders, notifications, or reports.

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def send_email(sender_email, sender_password, recipient_email, subject, body):
    """Sends an email using SMTP."""
    try:
        # Create a multipart message
        message = MIMEMultipart()
        message["From"] = sender_email
        message["To"] = recipient_email
        message["Subject"] = subject

        # Attach the body of the email
        message.attach(MIMEText(body, "plain")) # Or "html" if you want to send HTML emails

        # Connect to the SMTP server (Gmail example)
        with smtplib.SMTP("smtp.gmail.com", 587) as server: #  Use appropriate SMTP server settings for your email provider
            server.starttls() # Encrypt the connection
            server.login(sender_email, sender_password) # Log in to the sender's email account
            server.sendmail(sender_email, recipient_email, message.as_string())
        print("Email sent successfully!")

    except Exception as e:
        print(f"Error sending email: {e}")


# Replace with your actual email credentials and recipient information
sender_email = "your_email@gmail.com"  # Replace with your email address
sender_password = "your_password"  # Replace with your email password or app password
recipient_email = "recipient_email@example.com" # Replace with the recipient's email address
subject = "Automated Email from Python"
body = "This is an automated email sent from a Python script."

send_email(sender_email, sender_password, recipient_email, subject, body)

Explanation:

  • The smtplib module is used to connect to an SMTP server and send emails.
  • The email.mime.text module is used to create the email message.
  • The script connects to the SMTP server (in this example, Gmail’s SMTP server). Important: You might need to enable “less secure app access” in your Gmail settings or generate an “app password” for security reasons if you’re using Gmail. This is generally discouraged for security reasons; consider using a dedicated service like SendGrid or Mailgun for production environments.
  • The script logs in to the sender’s email account and sends the email.
  • Error handling is included to catch potential connection errors and authentication errors.
  • The MIMEMultipart and MIMEText classes are used to construct the email message, including the subject, sender, recipient, and body. You can also use MIMEText to send HTML emails by setting the second argument to "html".

Security Considerations:

  • Never Hardcode Passwords: Storing your email password directly in the script is a security risk. Instead, use environment variables or a secure configuration file to store your credentials.
  • Use App Passwords: If you’re using Gmail or another email provider that requires two-factor authentication, generate an app password specifically for your script.
  • Consider a Dedicated Email Service: For production environments, consider using a dedicated email service like SendGrid or Mailgun. These services offer better deliverability, security, and features.

Example 4: Automating Calendar Events
#

Python can interact with calendar services to automate event creation, updates, and reminders. Here’s a simplified example using the google-api-python-client library to interact with the Google Calendar API. This is a more complex example, requiring setup with the Google Cloud Console.

(1) Set up the Google Calendar API:

  • Enable the Google Calendar API in the Google Cloud Console.
  • Create a project.
  • Download the client configuration file (credentials.json).
  • Install the necessary libraries: pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib

(2) Example Code:

import datetime
import os.path

from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

def create_google_calendar_event(event_summary, event_description, start_time, end_time, timezone):
    """Creates an event on Google Calendar."""
    creds = None
    # The file token.json stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', ['https://www.googleapis.com/auth/calendar'])
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            from google_auth_oauthlib.flow import InstalledAppFlow
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', ['https://www.googleapis.com/auth/calendar'])
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('calendar', 'v3', credentials=creds)

        event = {
            'summary': event_summary,
            'description': event_description,
            'start': {
                'dateTime': start_time.isoformat(),
                'timeZone': timezone,
            },
            'end': {
                'dateTime': end_time.isoformat(),
                'timeZone': timezone,
            },
        }

        event = service.events().insert(calendarId='primary', body=event).execute()
        print(f"Event created: {event.get('htmlLink')}")

    except HttpError as error:
        print(f"An error occurred: {error}")


# Example Usage
event_summary = "Python Automation Meeting"
event_description = "Discussing Python automation strategies."
start_time = datetime.datetime(2025, 3, 10, 10, 0, 0) # Year, Month, Day, Hour, Minute, Second
end_time = datetime.datetime(2025, 3, 10, 11, 0, 0)
timezone = 'America/Los_Angeles' # Replace with your timezone


create_google_calendar_event(event_summary, event_description, start_time, end_time, timezone)

Explanation:

  • This code first authenticates with the Google Calendar API using OAuth 2.0. It checks for existing credentials in token.json. If they don’t exist or are invalid, it prompts the user to authenticate through a browser window. This is crucial for security - you don’t store passwords directly in the code.
  • The build function creates a service object that allows you to interact with the Google Calendar API.
  • The event dictionary defines the details of the event, including the summary, description, start time, end time, and timezone.
  • The service.events().insert() method inserts the event into the specified calendar (in this case, the primary calendar).
  • Error handling is included to catch potential API errors.

Important Notes:

  • credentials.json: You must download this file from the Google Cloud Console after setting up the API. Place this file in the same directory as your Python script.
  • token.json: This file is created automatically after you authenticate for the first time. It stores your access and refresh tokens, so you don’t have to re-authenticate every time you run the script.
  • Timezones: Use the correct timezone string. You can find a list of timezones at: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
  • Scopes: The ['https://www.googleapis.com/auth/calendar'] specifies the scope of access that your application requests. In this case, it requests permission to access your Google Calendar.

Conclusion
#

Python’s versatility and extensive libraries make it an invaluable tool for automating a wide range of daily tasks. By learning and implementing the examples provided in this article, you can significantly boost your productivity and free up time to focus on more meaningful activities. Remember to consider security best practices, error handling, and ethical considerations when automating tasks, especially those involving web scraping or email sending. As you become more proficient, you can explore more advanced automation techniques and create custom scripts to address your specific needs. Experiment, learn, and enjoy the power of Python automation!

Related

Python Web Frameworks: A Comprehensive Comparison
·1283 words·7 mins
Python Web Frameworks Django Flask FastAPI Comparison
This article provides a thorough analysis of leading Python web frameworks, enabling developers to choose the right tool for their specific project needs. We explore architecture, performance, scalability, and ease of use.
Two Sum - Leetcode
·794 words·4 mins
Python Leetcode Leetcode-Easy Notes
How to sove Two Sum problem from Leetcode and its explaination
Python Cheat Sheet
·1061 words·5 mins
Python Programming Notes
A notes about anything you need to know to start coding with python