folder_open Python

5 astuces Python pour automatiser vos tâches quotidiennes

Mayeul SAMBA

Mayeul SAMBA

Expert Formateur

calendar_today
5 astuces Python pour automatiser vos tâches quotidiennes

5 astuces Python pour automatiser vos tâches quotidiennes : un guide pour débutants

  • Python permet d'automatiser facilement des tâches système répétitives, réduisant les erreurs et économisant du temps.
  • Les bibliothèques standards telles que os, shutil, subprocess et schedule sont essentielles pour manipuler fichiers, processus et planification.
  • Des exemples concrets montrent comment automatiser la gestion de fichiers, l'envoi d'emails, le téléchargement de données, l'extraction d'informations et la planification de tâches.
  • Les erreurs courantes incluent la mauvaise gestion des erreurs, l'absence de tests et l'oubli de la documentation, qu'il faut éviter pour garantir la robustesse des scripts.
  • Des ressources pédagogiques et des outils complémentaires existent pour aider les débutants à approfondir leurs compétences en automatisation Python.

Introduction

L'automatisation des tâches quotidiennes est devenue un enjeu majeur pour améliorer la productivité et réduire les erreurs humaines. Pour les débutants en programmation, Python est un langage idéal grâce à sa simplicité, sa lisibilité et sa richesse en bibliothèques standards. Ce tutoriel vous présente cinq astuces pratiques pour automatiser des tâches système courantes avec Python. Chaque astuce est accompagnée d'exemples de code commentés, prêts à être testés, et s'appuie sur des bibliothèques standards pour éviter les dépendances externes. L'objectif est de vous donner des bases solides pour automatiser efficacement vos tâches quotidiennes, même sans connaissances avancées.


Astuce 1 : Automatiser la gestion des fichiers et répertoires

Pourquoi automatiser la gestion des fichiers ?
La gestion manuelle des fichiers (copie, déplacement, sauvegarde) est chronophage et sujette à des erreurs humaines. Python permet d'automatiser ces opérations via les modules os et shutil, offrant un contrôle précis et fiable.

Cas d'usage
Sauvegarder automatiquement un dossier de travail vers un répertoire de sauvegarde à intervalles réguliers.

Exemple de code

import os
import shutil
from datetime import datetime

def sauvegarder_dossier(source, destination):
    """
    Sauvegarde un dossier source vers un dossier de destination
    avec un horodatage pour éviter les écrasements
    """
    # Vérifier si le dossier source existe
    if not os.path.exists(source):
        print(f"Erreur : Le dossier source '{source}' n'existe pas.")
        return
    
    # Créer un nom unique avec la date
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    dossier_sauvegarde = os.path.join(destination, f"sauvegarde_{timestamp}")
    
    try:
        # Créer le dossier de destination s'il n'existe pas
        if not os.path.exists(destination):
            os.makedirs(destination)
            print(f"Dossier de destination créé : {destination}")
        
        # Copier récursivement le contenu
        shutil.copytree(source, dossier_sauvegarde)
        print(f"? Sauvegarde réussie : {dossier_sauvegarde}")
        
    except Exception as e:
        print(f"? Erreur lors de la sauvegarde : {e}")

# Exemple d'utilisation
if __name__ == "__main__":
    sauvegarder_dossier(
        source="/chemin/vers/mon/projet",
        destination="/chemin/vers/sauvegardes"
    )

Explications

  • os.path.exists() vérifie si le répertoire existe avant de continuer.
  • os.makedirs() crée le répertoire de destination et tous les parents nécessaires.
  • shutil.copytree() copie récursivement le contenu du répertoire source vers la destination.
  • L'horodatage dans le nom du dossier évite d'écraser les sauvegardes précédentes.
  • La gestion d'erreurs avec try-except évite que le script ne crash en cas de problème.

Astuce 2 : Automatiser l'envoi de courriels

Pourquoi automatiser l'envoi d'emails ?
L'envoi manuel d'emails est répétitif et peut entraîner des erreurs (adresses mal saisies, oublis). Python automatise ce processus via smtplib et email.

Cas d'usage
Envoyer des rappels ou notifications par email à une équipe ou à des clients.

Exemple de code

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
import os

def envoyer_email(destinataire, sujet, message, fichier_joint=None):
    """
    Envoie un email avec possibilité de pièce jointe
    """
    # Configuration du serveur SMTP (exemple avec Gmail)
    serveur_smtp = "smtp.gmail.com"
    port = 587
    email_expediteur = "votre.email@gmail.com"
    mot_de_passe = "votre_mot_de_passe_application"  # Utilisez un mot de passe d'application
    
    # Création du message
    msg = MIMEMultipart()
    msg['From'] = email_expediteur
    msg['To'] = destinataire
    msg['Subject'] = sujet
    
    # Ajout du corps du message
    msg.attach(MIMEText(message, 'plain', 'utf-8'))
    
    # Ajout de la pièce jointe si spécifiée
    if fichier_joint and os.path.exists(fichier_joint):
        with open(fichier_joint, 'rb') as fichier:
            piece = MIMEBase('application', 'octet-stream')
            piece.set_payload(fichier.read())
            encoders.encode_base64(piece)
            piece.add_header(
                'Content-Disposition',
                f'attachment; filename="{os.path.basename(fichier_joint)}"'
            )
            msg.attach(piece)
    
    try:
        # Connexion au serveur SMTP
        with smtplib.SMTP(serveur_smtp, port) as serveur:
            serveur.starttls()  # Sécuriser la connexion
            serveur.login(email_expediteur, mot_de_passe)
            serveur.send_message(msg)
            print(f"? Email envoyé avec succès à {destinataire}")
            
    except smtplib.SMTPAuthenticationError:
        print("? Erreur d'authentification : vérifiez vos identifiants")
    except smtplib.SMTPException as e:
        print(f"? Erreur SMTP : {e}")
    except Exception as e:
        print(f"? Erreur inattendue : {e}")

# Exemple d'utilisation
if __name__ == "__main__":
    envoyer_email(
        destinataire="collegue@example.com",
        sujet="Rappel : Réunion demain à 10h",
        message="Bonjour,\n\nPetit rappel pour notre réunion de demain à 10h.\n\nCordialement",
        fichier_joint="documents/ordre_du_jour.pdf"
    )

Explications

  • MIMEMultipart et MIMEText formatent le message email avec encodage UTF-8.
  • smtplib.SMTP établit la connexion au serveur SMTP.
  • starttls() sécurise la connexion avec le chiffrement TLS.
  • Le bloc try-except capture les erreurs spécifiques (authentification, SMTP) pour un diagnostic précis.
  • Utilisez un mot de passe d'application Gmail plutôt que votre mot de passe principal.

Astuce 3 : Automatiser le téléchargement de données

Pourquoi automatiser le téléchargement ?
Le téléchargement manuel de fichiers depuis des sources en ligne est long et répétitif. Python automatise ce processus via la bibliothèque requests.

Cas d'usage
Télécharger quotidiennement un rapport ou un fichier de données depuis un site web.

Exemple de code

import requests
import os
from datetime import datetime

def telecharger_fichier(url, dossier_destination="telechargements"):
    """
    Télécharge un fichier depuis une URL avec barre de progression
    """
    # Créer le dossier de destination si nécessaire
    if not os.path.exists(dossier_destination):
        os.makedirs(dossier_destination)
    
    # Extraire le nom du fichier depuis l'URL
    nom_fichier = url.split("/")[-1]
    chemin_complet = os.path.join(dossier_destination, nom_fichier)
    
    try:
        # Télécharger le fichier avec un timeout
        reponse = requests.get(url, stream=True, timeout=30)
        reponse.raise_for_status()  # Vérifier si la requête a réussi
        
        # Obtenir la taille totale du fichier
        taille_totale = int(reponse.headers.get('content-length', 0))
        
        # Télécharger avec barre de progression
        with open(chemin_complet, 'wb') as fichier:
            taille_telechargee = 0
            for chunk in reponse.iter_content(chunk_size=8192):
                if chunk:
                    fichier.write(chunk)
                    taille_telechargee += len(chunk)
                    
                    # Afficher la progression
                    if taille_totale > 0:
                        pourcentage = (taille_telechargee / taille_totale) * 100
                        print(f"\rProgression : {pourcentage:.1f}%", end="")
        
        print(f"\n? Fichier téléchargé avec succès : {chemin_complet}")
        print(f"   Taille : {taille_totale / (1024*1024):.2f} Mo")
        return chemin_complet
        
    except requests.exceptions.Timeout:
        print("? Erreur : Le téléchargement a expiré (timeout)")
    except requests.exceptions.ConnectionError:
        print("? Erreur de connexion : vérifiez votre connexion internet")
    except requests.exceptions.HTTPError as e:
        print(f"? Erreur HTTP : {e}")
    except Exception as e:
        print(f"? Erreur inattendue : {e}")
    
    return None

# Exemple d'utilisation
if __name__ == "__main__":
    telecharger_fichier(
        url="https://example.com/rapports/donnees_quotidiennes.csv",
        dossier_destination="mes_donnees"
    )

Explications

  • requests.get(url, stream=True) permet de télécharger le fichier par morceaux pour économiser la mémoire.
  • chunk_size=8192 définit la taille des morceaux téléchargés.
  • La barre de progression affiche le pourcentage de téléchargement en temps réel.
  • raise_for_status() lève une exception si le téléchargement échoue (404, 500...).
  • Le timeout de 30 secondes évite que le script ne bloque indéfiniment.

Astuce 4 : Automatiser l'extraction de données

Pourquoi automatiser l'extraction de données ?
L'extraction manuelle de données depuis des pages web ou des fichiers est fastidieuse. Python permet d'automatiser cette extraction via BeautifulSoup et requests.

Cas d'usage
Extraire les titres ou des données spécifiques d'une page web pour analyse.

Exemple de code

import requests
from bs4 import BeautifulSoup
import csv
from datetime import datetime

def extraire_articles(url_site):
    """
    Extrait les titres, liens et dates des articles d'un blog
    """
    try:
        # Récupérer le contenu de la page
        reponse = requests.get(url_site, timeout=10)
        reponse.raise_for_status()
        reponse.encoding = 'utf-8'  # S'assurer du bon encodage
        
        # Parser le HTML
        soup = BeautifulSoup(reponse.text, 'html.parser')
        
        # Trouver tous les articles (à adapter selon la structure du site)
        articles = soup.find_all('article')
        
        if not articles:
            print("Aucun article trouvé. Vérifiez la structure HTML du site.")
            return []
        
        donnees = []
        for article in articles:
            # Extraire le titre
            titre_elem = article.find('h2')
            titre = titre_elem.get_text(strip=True) if titre_elem else "Sans titre"
            
            # Extraire le lien
            lien_elem = article.find('a')
            lien = lien_elem.get('href') if lien_elem else ""
            
            # Extraire la date si disponible
            date_elem = article.find('time')
            date = date_elem.get('datetime', '') if date_elem else "Date inconnue"
            
            donnees.append({
                'titre': titre,
                'lien': lien,
                'date': date
            })
        
        print(f"? {len(donnees)} articles extraits avec succès")
        return donnees
        
    except requests.exceptions.Timeout:
        print("? Erreur : Le site met trop de temps à répondre")
        return []
    except Exception as e:
        print(f"? Erreur lors de l'extraction : {e}")
        return []

def sauvegarder_en_csv(donnees, nom_fichier="articles_extraites.csv"):
    """
    Sauvegarde les données extraites dans un fichier CSV
    """
    if not donnees:
        print("Aucune donnée à sauvegarder")
        return
    
    with open(nom_fichier, 'w', newline='', encoding='utf-8') as fichier:
        writer = csv.DictWriter(fichier, fieldnames=['titre', 'lien', 'date'])
        writer.writeheader()
        writer.writerows(donnees)
    
    print(f"? Données sauvegardées dans '{nom_fichier}'")

# Exemple d'utilisation
if __name__ == "__main__":
    articles = extraire_articles("https://example-blog.com")
    sauvegarder_en_csv(articles)

Explications

  • requests.get(url) récupère le contenu HTML de la page.
  • BeautifulSoup parse le HTML et permet d'extraire les éléments souhaités avec des sélecteurs.
  • find_all('article') cherche tous les éléments <article> (à adapter selon la structure du site cible).
  • get_text(strip=True) extrait le texte en supprimant les espaces superflus.
  • L'export CSV permet d'utiliser les données dans Excel ou d'autres outils d'analyse.

Astuce 5 : Planifier des tâches répétitives

Pourquoi planifier les tâches ?
Exécuter manuellement des scripts à intervalles réguliers est peu fiable. Python permet de planifier ces exécutions via la bibliothèque schedule.

Cas d'usage
Exécuter un script de sauvegarde ou d'envoi d'emails tous les jours à une heure précise.

Exemple de code

import schedule
import time
from datetime import datetime

# Importer vos fonctions d'automatisation
# from sauvegarde import sauvegarder_dossier
# from email_auto import envoyer_email

def tache_sauvegarde():
    """Tâche de sauvegarde quotidienne"""
    print(f"[{datetime.now().strftime('%H:%M:%S')}] Démarrage de la sauvegarde...")
    # sauvegarder_dossier("/chemin/source", "/chemin/destination")
    print("? Sauvegarde terminée")

def tache_rapport():
    """Tâche d'envoi de rapport hebdomadaire"""
    print(f"[{datetime.now().strftime('%H:%M:%S')}] Envoi du rapport...")
    # envoyer_email("equipe@example.com", "Rapport hebdomadaire", "Voir pièce jointe")
    print("? Rapport envoyé")

def tache_nettoyage():
    """Tâche de nettoyage des fichiers temporaires"""
    print(f"[{datetime.now().strftime('%H:%M:%S')}] Nettoyage des fichiers temporaires...")
    # Code de nettoyage ici
    print("? Nettoyage terminé")

# Planification des tâches
# Tous les jours à 9h00
schedule.every().day.at("09:00").do(tache_sauvegarde)

# Tous les lundis à 10h00
schedule.every().monday.at("10:00").do(tache_rapport)

# Toutes les 6 heures
schedule.every(6).hours.do(tache_nettoyage)

# Toutes les 30 minutes
schedule.every(30).minutes.do(lambda: print(f"[{datetime.now().strftime('%H:%M:%S')}] Vérification périodique..."))

print("? Planificateur démarré. Tâches planifiées :")
print("- Sauvegarde : tous les jours à 09:00")
print("- Rapport : tous les lundis à 10:00")
print("- Nettoyage : toutes les 6 heures")
print("- Vérification : toutes les 30 minutes")
print("\nAppuyez sur Ctrl+C pour arrêter\n")

# Boucle principale
try:
    while True:
        schedule.run_pending()
        time.sleep(1)  # Vérifier toutes les secondes
except KeyboardInterrupt:
    print("\n\n? Planificateur arrêté")

Explications

  • schedule.every().day.at("09:00") programme l'exécution quotidienne à 9h.
  • schedule.every().monday permet de cibler un jour spécifique de la semaine.
  • La boucle while True maintient le script en vie et exécute les tâches planifiées.
  • time.sleep(1) réduit la charge CPU en espaçant les vérifications.
  • Le try-except KeyboardInterrupt permet d'arrêter proprement avec Ctrl+C.
  • Note : Pour un environnement de production, utilisez plutôt cron (Linux/Mac) ou le Planificateur de tâches (Windows).

Tableau récapitulatif des astuces et bibliothèques associées

Astuce Description Bibliothèques Exemple d'usage Difficulté
Gestion de fichiers Copie, sauvegarde, organisation os, shutil Sauvegarde automatique quotidienne Débutant
Envoi de courriels Emails automatisés avec pièces jointes smtplib, email Notifications et rappels Intermédiaire
Téléchargement Récupération de fichiers en ligne requests Rapports quotidiens automatiques Débutant
Extraction de données Web scraping et parsing HTML requests, bs4 Veille concurrentielle automatisée  Intermédiaire
Planification Ordonnancement de tâches schedule Maintenance système régulière Débutant

Bonnes pratiques à retenir

  1. Gérez toujours les erreurs : Utilisez des blocs try-except pour éviter les crashes.
  2. Utilisez des logs : Remplacez les print() par le module logging pour un suivi professionnel.
  3. Testez vos scripts : Commencez par des tests sur des données factices.
  4. Documentez votre code : Les docstrings et commentaires facilitent la maintenance.
  5. Utilisez des variables d'environnement : Stockez les mots de passe et clés API dans des fichiers .env.
  6. Planifiez avec cron : Pour la production, préférez cron (Linux) ou le Planificateur Windows.

Conclusion

L'automatisation des tâches système quotidiennes avec Python est un levier puissant pour gagner du temps, réduire les erreurs humaines et améliorer la productivité. Grâce aux bibliothèques standards et à des exemples simples, les débutants peuvent rapidement mettre en place des scripts efficaces pour gérer les fichiers, envoyer des emails, télécharger et extraire des données, ainsi que planifier des tâches répétitives.

Prochaines étapes :

  • Installez Python si ce n'est pas déjà fait
  • Testez chaque exemple dans un fichier .py séparé
  • Adaptez les chemins et paramètres à votre environnement
  • Combinez plusieurs astuces pour créer votre propre système d'automatisation

N'hésitez pas à explorer ces astuces et à expérimenter pour transformer vos tâches quotidiennes en processus automatisés fiables. L'apprentissage de l'automatisation est un investissement qui vous fera gagner un temps précieux sur le long terme ! ??


Cet article s'adresse aux débutants en Python souhaitant découvrir l'automatisation de tâches système. Les exemples de code sont fonctionnels et prêts à être testés. Important : Pour les emails, utilisez un mot de passe d'application Gmail. Pour le web scraping, respectez les conditions d'utilisation des sites web et le fichier robots.txt.

Cet article vous a plu ?

Partagez ce savoir avec votre réseau

forum Commentaires 1

lock

Rejoignez la conversation

Connectez-vous pour partager vos expériences et échanger avec la communauté.

login Se connecter pour commenter
Afro Tech
Afro Tech il y a 1 semaine, 2 jours

Merci beaucoup pour le partage.

Prêt à propulser votre carrière ?

Rejoignez Mayeul SAMBA et des milliers d'étudiants sur la plateforme tech de référence en Afrique.