Recherche de site Web

6 Scripts Python de base mais utiles pour bien débuter


Python est l'un des langages les plus accessibles à apprendre, grâce à son approche orientée objet avant tout et à sa syntaxe minimale. La bibliothèque standard comprend de nombreux modules utiles que vous pouvez utiliser pour écrire toutes sortes de programmes, grands et petits.

Les scripts ici sont tous petits, avec un focus étroit sur une tâche utile. Vous pouvez les utiliser non seulement pour des activités quotidiennes, mais aussi pour les développer et les étendre afin d'ajouter des fonctionnalités supplémentaires.

1. Renommeur de fichiers par lot

Renommer un ensemble de fichiers peut être une tâche difficile. Si vous vous souvenez de la syntaxe de votre shell, vous pouvez écrire une commande sur le moment, ou vous pouvez vous appuyer sur un programme tiers comme rename.

Ce simple programme Python renomme tous les fichiers dans votre répertoire courant contenant un texte spécifique, en remplaçant ce texte par un motif donné. Vous pourriez l'utiliser, par exemple, pour changer un ensemble d'extensions de ".htm" en ".html."

import os, sys
if len(sys.argv) < 3:
    sys.exit("usage: " + sys.argv[0] + " search replace")
for filename in os.listdir("."):
    new_filename = filename.replace(sys.argv[1], sys.argv[2])
    if new_filename != filename:
        os.rename(
            os.path.join(".", filename),
            os.path.join(".", new_filename),
        )

    

Le script importe quelques modules bas niveau utiles : os et sys. Il utilise immédiatement ce dernier pour vérifier le nombre d'arguments (sys.argv) et quitte si trop peu sont fournis.

La boucle principale for parcourt ensuite tous les noms de fichiers dans le répertoire courant (.). La méthode replace de la classe string tente ensuite de remplacer le premier argument par le second.

Un dernier contrôle pour vérifier si le nom de fichier a changé est ensuite suivi d'un appel à os.rename() qui met à jour le fichier si nécessaire.

Ce script manque de gestion complète des erreurs, et vous devriez limiter son utilisation à la recherche et au remplacement simples de chaînes. Soyez toujours prudent avec les opérations par lots pouvant affecter de nombreux fichiers.

2. Créateur de vignettes d'image

Le script de quatre lignes suivant montre la puissance d'une bibliothèque pratique, dans ce cas, Pillow. Ce fork de la bibliothèque Python Imaging contient de nombreuses fonctions de traitement d'images, pour prendre en charge tout, des scripts simples aux éditeurs graphiques complets.

Vous devrez installer la bibliothèque Pillow avant de pouvoir exécuter ce script. brew install pillow a bien fonctionné pour moi sur macOS, mais vous pouvez également essayer pip, comme le recommande la page d'installation.

Le script utilise trois méthodes du module Image pour ouvrir un fichier, créer une vignette et l'enregistrer dans un deuxième fichier :

from PIL import Image
image = Image.open("image.jpg")
image.thumbnail((500, 500))
image.save("image_thumb.jpg")

    

Remarquez comment la fonction thumbnail prend un seul argument, qui est un tuple. Elle créera une image avec le même ratio que l'original, avec une largeur et une hauteur maximales selon les dimensions que vous fournissez.

En soi, cela a une utilité limitée puisque le nom de fichier et les dimensions sont codés en dur. Vous pouvez étendre sa fonctionnalité en passant ces valeurs comme arguments en ligne de commande à la place, en utilisant une seconde version du script qui n'est pas beaucoup plus grande :

from PIL import Image
import sys
if len(sys.argv) < 4:
    sys.exit("usage: " + sys.argv[0] + " image width height")
image = Image.open(sys.argv[1])
image.thumbnail((int(sys.argv[2]), int(sys.argv[3])))
image.save("thumb.jpg")

    

Notez que le nom de fichier de la vignette finale est toujours codé en dur. Comme extension supplémentaire, vous pourriez générer un nom de fichier basé sur l'original, ou accepter un quatrième paramètre en ligne de commande.

3. Serveur Web Simple

Un serveur web basique peut être très utile ; j'en utilise un pour naviguer rapidement et accéder aux fichiers sur mon ordinateur local. Il peut également être un outil pratique pour le développement web.

Peu de serveurs web sont aussi simples que celui-ci :

import http.server, socketserver
port = 8001
with socketserver.TCPServer(
    ("", port), http.server.SimpleHTTPRequestHandler
) as httpd:
    print(f"Serving at port {port}")
    httpd.serve_forever()

    

Les modules http.server et socketserver font la majeure partie du travail ici. Une instance générique de TCPServer reçoit un port et un SimpleHTTPRequestHandler qui sert des fichiers depuis le répertoire courant via HTTP. La méthode serve_forever (héritée d'une classe socketserver.BaseServer) gère les requêtes jusqu'à ce que la méthode shutdown() soit appelée.

Comme le prévient la documentation de Python, le module http.server manque de sécurité adéquate et n'est pas destiné à une utilisation en production.

Bien que ce ne soit qu'un serveur factice, il est idéal pour un usage personnel et sa simplicité est inégalée.

4. Générateur de mots de passe aléatoires

Que ce soit pour un nouveau compte utilisateur, un formulaire web ou votre propre travail de développement, un mot de passe aléatoire est souvent nécessaire. Vous devriez probablement utiliser un gestionnaire de mots de passe pour cela, mais ce n'est pas toujours approprié. Avec votre propre script, vous pouvez contrôler les détails exacts et l'ajuster selon vos besoins.

import string, random
def main(length: int) -> str:
    characters = string.ascii_letters + string.digits + string.punctuation
    return "".join(random.choice(characters) for i in range(length))
print(main(32))

    

Ce script utilise les modules string et random pour générer un mot de passe aléatoire en seulement cinq lignes de code. Le module string contient des constantes utiles regroupant des ensembles de caractères individuels comme les chiffres et les lettres. En les combinant et en choisissant un nombre au hasard, le script concatène une série de caractères pour produire le mot de passe final.

5. Vérificateur de prix de crypto

Ce script démontre la puissance d'une API propre et simple. L'API qu'il utilise — provenant de Coingecko — fonctionne via HTTP, ce qui la rend très portable et facile à prendre en charge.

Avant d'exécuter ce script, consultez la réponse de l'API depuis le point de terminaison qu'il utilise, /simple/price. Vous devriez voir qu'elle renvoie des données au format JSON avec des entrées pour les devises spécifiées dans le paramètre ids.

import urllib.request, json
def get_crypto_prices():
    url = "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum,litecoin&vs_currencies=usd"
    ufile = urllib.request.urlopen(url)
    text = ufile.read()
    return json.loads(text)
crypto_prices = get_crypto_prices()
for coin, value in crypto_prices.items():
    print(f"{coin.capitalize()}: ${value['usd']}")

    

Le module urllib.request comprend une méthode urlopen() qui récupère le contenu d'une URL et retourne un objet HTTPResponse. Lire son texte et le passer à la méthode json.loads() permet de construire un objet dictionnaire équivalent.

JSON est un format très populaire pour les API web car sa syntaxe simple et son format lisible par l'homme facilitent son analyse et ses tests.

6. Générateur de tableau ASCII

L'ensemble de caractères ASCII est une collection de 128 caractères communs de la langue anglaise, utilisés dans divers contextes informatiques. La plupart des langages de programmation prennent en charge la conversion des codes ASCII en caractères individuels, et vice versa, mais il est parfois utile de voir tous les caractères ASCII en même temps.

for i in range(32, 128):
    print("{:03d}".format(i) + " " + chr(i), end=" ")
    if (i - 1) % 10 == 0:
        print()
print()

    

Ce script affiche un tableau contenant tous les caractères ASCII de 32 à 127, chacun accompagné de son point de code :

La première chose à noter est la façon dont la fonction intégrée de Python range() traite ses paramètres ; elle itère en partant du premier, mais s'arrête avant d'atteindre le second. Dans un langage comme JavaScript, la boucle for équivalente ressemblerait à ceci :

for (i = 0; i < 128; i++) { ... }

    

La majeure partie du travail restant se trouve dans la ligne print() et comprend le formatage de chaque point de code avec une largeur fixe de trois caractères. La fonction chr() renvoie un caractère donné son code ASCII.

Une propriété utile de l'ASCII, que ce tableau démontre, est que le code de chaque lettre minuscule (a-z) est exactement 32 supérieur à son équivalent en majuscule.

L'astuce restante consiste à imprimer un caractère de nouvelle ligne au bon endroit, afin que la sortie soit joliment répartie en lignes. Cela utilise l'opérateur % pour vérifier le reste de l'indice de la plage lorsqu'il est divisé par 10, garantissant ainsi dix caractères par ligne.