0% ont trouvé ce document utile (0 vote)
0 vues18 pages

Cours Module Os - MD

os doc

Transféré par

sxjunior47
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues18 pages

Cours Module Os - MD

os doc

Transféré par

sxjunior47
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Cours complet — Module os en Python

Niveau : Intermédiaire
Prérequis : Bases de Python (variables, fonctions, boucles, exceptions)
Objectif : Maîtriser l'interaction avec le système d'exploitation via le module os

Table des matières


1. Introduction
2. Navigation dans le système de fichiers
3. Manipulation de fichiers et répertoires
4. Informations sur les fichiers
5. Variables d'environnement
6. Exécution de commandes système
7. Chemins avec [Link]
8. Parcours d'arborescence
9. Permissions et propriétés
10. Constantes utiles
11. Exercices
12. Projet mini-capstone

1. Introduction
Le module os fournit une interface portable avec le système d'exploitation sous-jacent
(Linux, macOS, Windows). Il permet d'interagir avec le système de fichiers, les processus,
les variables d'environnement, etc.
python

import os

# Informations de base
print([Link]) # 'posix' (Linux/macOS) ou 'nt' (Windows)
print([Link]) # '/' sur Linux, '\' sur Windows
print([Link]) # '\n' sur Linux, '\r\n' sur Windows
print([Link]) # '.' (répertoire courant)
print([Link]) # '..' (répertoire parent)

2. Navigation dans le système de fichiers

2.1 Répertoire courant

python

import os

# Obtenir le répertoire courant (Current Working Directory)


cwd = [Link]()
print(cwd) # ex: /home/tzedek/projets

# Changer de répertoire
[Link]('/tmp')
print([Link]()) # /tmp

# Revenir au répertoire précédent


[Link](cwd)

2.2 Lister le contenu d'un répertoire


python

# Lister les fichiers et dossiers


contenu = [Link]('.') # liste du répertoire courant
contenu = [Link]('/home') # liste d'un répertoire précis

print(contenu) # ['[Link]', 'dossier1', ...]

# Filtrer uniquement les fichiers Python


py_files = [f for f in [Link]('.') if [Link]('.py')]

2.3 [Link]() — version moderne et efficace

python

# scandir() retourne des objets DirEntry (plus riche que listdir)


with [Link]('.') as entries:
for entry in entries:
print([Link], entry.is_file(), entry.is_dir())

# Lister uniquement les fichiers (pas les dossiers)


with [Link]('.') as entries:
fichiers = [[Link] for e in entries if e.is_file()]

Conseil : Préférer scandir() à listdir() quand tu as besoin d'infos sur chaque entrée
— c'est plus rapide car il évite des appels système supplémentaires.

3. Manipulation de fichiers et répertoires

3.1 Créer des répertoires


python

# Créer un seul répertoire


[Link]('mon_dossier')

# Créer plusieurs niveaux d'un coup (équivalent de mkdir -p)


[Link]('a/b/c')
[Link]('a/b/c', exist_ok=True) # ne lève pas d'erreur si déjà existant

3.2 Supprimer des fichiers et répertoires

python

# Supprimer un fichier
[Link]('[Link]')

# Supprimer un répertoire VIDE


[Link]('dossier_vide')

# Supprimer un arbre de répertoires (récursif)


import shutil
[Link]('mon_dossier') # shutil est plus adapté pour ça

Attention : [Link]() et [Link]() ne vont pas dans la corbeille — la suppression


est définitive.

3.3 Renommer et déplacer


python

# Renommer un fichier ou dossier


[Link]('ancien_nom.txt', 'nouveau_nom.txt')

# Déplacer (fonctionne aussi entre répertoires)


[Link]('[Link]', 'sous_dossier/[Link]')

# [Link]() écrase silencieusement si la destination existe


[Link]('[Link]', '[Link]')

3.4 Créer des liens symboliques

python

# Lien symbolique (Linux/macOS)


[Link]('[Link]', '[Link]')

# Vérifier si c'est un lien symbolique


print([Link]('[Link]')) # True

4. Informations sur les fichiers

4.1 [Link]() — métadonnées complètes


python

info = [Link]('[Link]')

print(info.st_size) # taille en octets


print(info.st_mtime) # date de modification (timestamp UNIX)
print(info.st_ctime) # date de création (Linux: dernier changement de métadonnées)
print(info.st_mode) # permissions (en octal)
print(info.st_uid) # UID du propriétaire
print(info.st_gid) # GID du groupe

# Convertir timestamp en date lisible


from datetime import datetime
date_modif = [Link](info.st_mtime)
print(date_modif) # 2025-03-08 14:32:00

4.2 Tests rapides

python

chemin = '/home/tzedek/[Link]'

[Link](chemin) # True si le chemin existe


[Link](chemin) # True si c'est un fichier
[Link](chemin) # True si c'est un répertoire
[Link](chemin) # True si c'est un lien symbolique
[Link](chemin, os.R_OK) # True si lisible
[Link](chemin, os.W_OK) # True si modifiable
[Link](chemin, os.X_OK) # True si exécutable

5. Variables d'environnement
Les variables d'environnement sont des paires clé-valeur héritées du shell. Elles
contiennent des infos comme le chemin utilisateur, la langue, les tokens, etc.

python

# Lire une variable (retourne None si absente)


home = [Link]('HOME')
print(home) # /home/tzedek

# Lire avec valeur par défaut


lang = [Link]('LANG', 'fr_FR.UTF-8')

# Lire sans sécurité (lève KeyError si absente — à éviter)


path = [Link]['PATH']

# Définir une variable (valable uniquement dans le processus courant)


[Link]['MON_TOKEN'] = 'abc123'

# Supprimer une variable


del [Link]['MON_TOKEN']
# ou
[Link]('MON_TOKEN', None) # sécurisé si elle n'existe pas

# Lister toutes les variables


for cle, valeur in [Link]():
print(f"{cle} = {valeur}")

Bonne pratique : Ne jamais coder en dur des tokens ou mots de passe dans le code.
Les lire depuis les variables d'environnement avec [Link]() .

6. Exécution de commandes système

6.1 [Link]() — simple mais limité


python

# Exécute une commande, retourne le code de retour


code = [Link]('ls -la')
print(code) # 0 = succès

[Link]('mkdir nouveau_dossier')

Limite : [Link]() ne capture pas la sortie. Pour ça, utiliser subprocess (module
dédié).

6.2 [Link]() — lecture de la sortie

python

# Lire la sortie d'une commande


with [Link]('uname -a') as f:
resultat = [Link]()
print(resultat)

Conseil : Pour tout usage sérieux (scripts de prod, gestion d'erreurs), préférer le
module subprocess .

7. Chemins avec [Link]


[Link] est un sous-module de os entièrement dédié à la manipulation de chemins de
fichiers.

7.1 Construction de chemins


python

# Joindre des parties de chemin (portable Windows/Linux)


chemin = [Link]('/home', 'tzedek', 'projets', '[Link]')
# → /home/tzedek/projets/[Link]

# Chemin absolu à partir d'un chemin relatif


abs = [Link]('../../mon_fichier.txt')

# Chemin du script en cours d'exécution


dossier_script = [Link]([Link](__file__))

7.2 Décomposition d'un chemin

python

chemin = '/home/tzedek/projets/[Link]'

[Link](chemin) # '[Link]'
[Link](chemin) # '/home/tzedek/projets'
[Link](chemin) # ('/home/tzedek/projets', '[Link]')
[Link](chemin) # ('/home/tzedek/projets/script', '.py')

nom, ext = [Link]('[Link]')


print(nom) # rapport
print(ext) # .pdf

7.3 Taille et existence


python

[Link]('[Link]') # taille en octets


[Link]('[Link]') # True/False
[Link]('/home/tzedek') # True (chemin absolu)
[Link]('relatif/chemin') # False

7.4 Normalisation

python

# Résoudre les '..' et '.'


[Link]('/home/tzedek/../tzedek/./projets')
# → /home/tzedek/projets

# Résoudre les liens symboliques


[Link]('lien_sym') # chemin réel

8. Parcours d'arborescence

8.1 [Link]() — explorer récursivement

[Link]() génère un tuple (racine, dossiers, fichiers) pour chaque niveau de


l'arborescence.

python

for racine, dossiers, fichiers in [Link]('/home/tzedek/projets'):


print(f"Dossier : {racine}")
for f in fichiers:
chemin_complet = [Link](racine, f)
print(f" Fichier : {chemin_complet}")
Exemple : trouver tous les fichiers .py récursivement

python

def trouver_fichiers_py(racine):
resultats = []
for dossier, _, fichiers in [Link](racine):
for f in fichiers:
if [Link]('.py'):
[Link]([Link](dossier, f))
return resultats

py_files = trouver_fichiers_py('/home/tzedek/projets')

Exemple : calculer la taille totale d'un dossier

python

def taille_dossier(chemin):
total = 0
for dossier, _, fichiers in [Link](chemin):
for f in fichiers:
fp = [Link](dossier, f)
if not [Link](fp):
total += [Link](fp)
return total

taille = taille_dossier('/home/tzedek')
print(f"Taille totale : {taille / (1024**2):.2f} Mo")

9. Permissions et propriétés

9.1 Modifier les permissions


python

import stat

# Rendre un script exécutable


[Link]('[Link]', 0o755)
# 0o755 = rwxr-xr-x (octal)

# Utiliser les constantes stat


[Link]('[Link]', stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP)

# Lire les permissions actuelles


info = [Link]('[Link]')
print(oct(info.st_mode)) # ex: 0o100755

9.2 Changer le propriétaire (Linux, root requis)

python

# Changer propriétaire et groupe


[Link]('[Link]', uid=1000, gid=1000)

10. Constantes utiles


Constante Valeur Description

[Link] / ou \ Séparateur de chemin

[Link] \n ou \r\n Saut de ligne

[Link] /dev/null Périphérique null

[Link] . Répertoire courant

[Link] .. Répertoire parent

[Link] . Séparateur d'extension

[Link] : ou ; Séparateur dans PATH

python

# Exemple pratique : rediriger la sortie vers /dev/null


import subprocess
[Link](['commande'], stdout=open([Link], 'w'))

11. Exercices

Niveau 1 — Débutant

Ex 1.1 — Afficher le répertoire courant, lister son contenu, et afficher le nombre


d'éléments qu'il contient.

Ex 1.2 — Écrire une fonction creer_structure(base) qui crée l'arborescence suivante :


base/
src/
tests/
docs/
[Link]

Ex 1.3 — Écrire une fonction info_fichier(chemin) qui affiche :

• le nom du fichier
• son extension
• sa taille en Ko
• sa date de dernière modification (format lisible)

Niveau 2 — Intermédiaire

Ex 2.1 — Écrire une fonction lister_par_extension(dossier, ext) qui retourne tous les
fichiers d'une extension donnée dans un dossier (non récursif).

Ex 2.2 — Écrire une fonction renommer_batch(dossier, ancien_ext, nouvel_ext) qui renomme


tous les fichiers d'une extension en une autre. Exemple : tous les .txt en .md .

Ex 2.3 — Écrire une fonction nettoyer_vides(dossier) qui supprime tous les sous-dossiers
vides dans un répertoire.

Ex 2.4 — Écrire un script qui lit la variable d'environnement LOG_DIR . Si elle n'existe
pas, créer un dossier logs/ dans le répertoire courant et l'assigner.

Niveau 3 — Avancé

Ex 3.1 — Écrire une fonction dupliquer_arbre(source, destination) qui copie toute une
arborescence de dossiers (sans les fichiers) dans une nouvelle destination.
Ex 3.2 — Écrire une fonction trouver_doublons(dossier) qui retourne un dictionnaire
{taille: [liste_de_chemins]} pour tous les fichiers ayant la même taille (potentiels
doublons).

Ex 3.3 — Écrire un script [Link] qui parcourt récursivement un dossier et génère un


fichier [Link] avec les colonnes : nom , chemin , taille_octets , date_modification ,
extension .

12. Projet mini-capstone

file_manager.py — Gestionnaire de fichiers en ligne de commande

Créer un script CLI qui propose un menu interactif :

=== File Manager ===


1. Afficher le répertoire courant
2. Lister le contenu
3. Changer de répertoire
4. Créer un dossier
5. Supprimer un fichier
6. Chercher des fichiers par extension
7. Afficher les infos d'un fichier
8. Calculer la taille d'un dossier
9. Quitter

Exigences :

• Toutes les opérations utilisent uniquement os et [Link]


• Gestion des erreurs avec try/except pour chaque opération
• Affichage clair avec les tailles en Ko/Mo selon le cas
• Utiliser [Link]('HOME') comme répertoire de départ par défaut
Récapitulatif — Fonctions essentielles
Catégorie Fonction Rôle

Navigation [Link]() Répertoire courant

Navigation [Link](p) Changer de répertoire

Navigation [Link](p) Lister un dossier

Navigation [Link](p) Lister avec métadonnées

Création [Link](p) Créer un dossier

Création [Link](p) Créer plusieurs niveaux

Suppression [Link](p) Supprimer un fichier

Suppression [Link](p) Supprimer un dossier vide

Renommage [Link](a, b) Renommer/déplacer

Info [Link](p) Métadonnées complètes

Env [Link](k) Lire variable d'env

Chemins [Link]() Construire un chemin

Chemins [Link]() Tester l'existence

Chemins [Link]() Nom du fichier

Chemins [Link]() Répertoire parent

Chemins [Link]() Séparer nom/extension

Parcours [Link](p) Parcours récursif

Permissions [Link](p, mode) Modifier les droits

Vous aimerez peut-être aussi