Le chat d'octets

Photo de Gribouille

La bibliothèque os

Présentation de os

La bibliothèque os en Python est un module standard qui permet d'interagir avec le système d'exploitation. Elle fournit des fonctions pour manipuler les fichiers, les répertoires, les processus et les variables d'environnement.

Obtenir des informations sur le système

Nous pouvons récupérer des informations sur l'utilisateur courant et sur le système d'exploitation.

import os 

# Nom du système d'exploitation
print(os.name)

# Information sur le système 
print(os.uname())

# Identifiant de l'utilisateur courant
print(os.getlogin())

# ID de l'utilisateur et du groupe 
print(os.getuid())
print(os.getgid())

Manipuler les variables d'environnement

Nous pouvons lire et modifier les variables d'environnement du système.

# Afficher toutes les variables d'environnement
print(os.environ)

# Récupérer une variable d'environnement spécifique
print(os.environ.get("HOME"))   # Répertoire utilisateur (Linux/Mac)
print(os.environ.get("USERNAME"))   # Répertoire utilisateur (Windows)

# Définir une variable d'environnement temporairement
os.environ["TEST"] = "une_valeur"
print(os.environ.get("TEST"))

Interagir avec le système d'exploitation

Nous exécutons une commande système pour lister les fichiers et répertoires : sous Linux/Mac, nous utilisons ls -l, et sous Windows, la commande dir est utilisée.

os.system("ls -l")  # Sur Linux / MAC
os.system("dir")    # Sur Windows 

Pour capturer le résultat de la commande, on utilise subprocess (qui est recommandé)

import subprocess

result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
print(result.stdout)

Gérer les processus

Nous pouvons obtenir l'identifiant du processus courant.

# Obtenir l'ID du processus en cours d'exécution 
print(os.getpid())

# Obtenir l'ID du parent du processus en cours 
print(os.getppid())

# Lancer un autre programme 
os.system("python3 --version")

Gérer les fichiers et répertoires

Créer et supprimer des fichiers et dossiers

Nous créons des dossiers simples ou imbriqués, supprimons un dossier vide et effaçons un dossier avec tout son contenu.

# créer un dossier
os.mkdir("mon_dossier")

# Créer plusieurs dossiers imbriqués
os.makedirs("mon_dossier/sous_dossier", exist_ok=True)

# Supprimer un dossier vide
os.rmdir("mon_dossier")

# Supprimer un fichier
os.remove("mon_fichier.txt")

# Supprimer un dossier avec son contenu
import shutil
shutil.rmtree("mon_dossier")

Lister le contenu d'un dossier

Nous allons afficher la liste des fichiers et dossiers du répertoire courant.

contenu = os.listdir(".")
print(contenu)

Nous utilisons os.walk() pour parcourir tous les fichiers du répertoire courant.

for root, dirs, files in os.walk("."):
    print(f"Dossier actuel : {root}")
    print(f"Sous-dossiers : {dirs}")
    print(f"Fichiers : {files}")

Naviguer dans le système de fichiers

Nous récupérons le répertoire de travail actuel, puis changeons le répertoire courant et vérifions que la modification a bien été effectuée.

# Récupérer le répertoire de travail
cwd = os.getcwd()
print(cwd)

# Changer le répertoire courant
os.chdir("/home/user/Documents")
print(os.getcwd())  # Vérifier qu'on est bien dans le bon dossier

Gérer les permissions des fichiers

# Modifier les permissions d'un fichier
os.chmod("mon_fichier.txt", 0o777) # Donne tout les droits

# Vérifier les permissions d'un fichier
info = os.stat("mon_fichier.txt") 
print(info.st_mode)     # Affiche les permissions sous forme de nombre

Manipuler les chemins de fichiers avec os.path

Avant pathlib, os.path était la méthode standard pour manipuler les chemins.

Importation et gestion de chemins

Ce script permet de manipuler les chemins de fichiers : obtenir le chemin absolu, le répertoire parent, le nom et l’extension d’un fichier.

import os

# Récupérer le chemin absolu
chemin_absolu = os.path.abspath("fichier.txt")
print(chemin_absolu)  

# Obtenir le répertoire parent
parent = os.path.dirname(chemin_absolu)
print(parent)

# Obtenir le nom du fichier
nom_fichier = os.path.basename("/home/user/fichier.txt")
print(nom_fichier)  # fichier.txt

# Joindre plusieurs morceaux de chemin
chemin = os.path.join("/home", "user", "Documents", "mon_fichier.txt")

# Obtenir l'extension du fichier
nom, ext = os.path.splitext("fichier.txt")
print(nom, ext)   # fichier  .txt

Vérifier l'existence et le type d'un fichier

Ce script vérifie si un chemin existe et s’il correspond à un fichier ou un répertoire.

chemin = "fichier.txt"

print(os.path.exists(chemin))   # vérifie si le fichier existe
print(os.path.isfile(chemin))   # vérifie si c'est un fichier
print(os.path.isdir(chemin))    # Vérifie si c'est un dossier