Les Librairies systèmes
Qu’est-ce qu’une Librairie système ?
En Python, les librairies systèmes fournissent des interfaces pour intéragir avec le système d’exploitation et les ressources matérielles sous-jacentes.
Une librairie système est un ensemble de modules et de fonctions fournies par le système d’exploitation ou par des bibliothèques externes qui permettent aux programmes :
- De communiquer avec le système d’exploitation
- D’accéder aux ressources matérielles
- De gérer des processus
- De manipuler des fichiers
- D’effectuer d’autres opérations système de bas niveau.
Exemple
import os # importation de la librairie os
print(os.listdir('.')) # Liste les fichiers dans le répertoire courant
os.mkdir("foo") # Crée le répertoire foo
Librairie os
Ce module permet d’utiliser les fonctionnalités dépendantes du système d’exploitation telles que :
- La gestion des fichiers et des répertoires
- L’exécution de commandes système
Il faut d’abord importer la librairie :
import os
Fichiers et Répertoires
Qu’est-ce qu’un fichier ?
Un fichier est une unité de stockage sur un ordinateur. Pensez à un fichier comme à une feuille de papier où vous pouvez écrire des informations. Les fichiers peuvent contenir différents types de données, comme du texte, des images, de la musique, des vidéos, ou des programmes.
Qu’est-ce qu’un répertoire ?
Un répertoire, aussi appelé dossier, est un conteneur qui peut contenir des fichiers et d’autres répertoires. Imaginez un répertoire comme un classeur où vous pouvez organiser vos feuilles de papier (fichiers) en différentes sections (sous-dossiers).
Organisation des fichiers et des répertoires
Les fichiers et les répertoires sont organisés dans une structure hiérarchique, souvent comparée à un arbre :
- Répertoire racine : Le répertoire principal qui contient tous les autres fichiers et répertoires. Sur Windows, il est souvent appelé
C:\
. Sur macOS et Linux, il est appelé/
. - Sous-répertoires : Répertoires à l’intérieur d’autres répertoires. Ils permettent d’organiser les fichiers de manière logique. Par exemple, un répertoire
Documents
peut contenir des sous-répertoires pour desprojets
, desfactures
, etc. - Chemin d’accès : La manière dont on désigne l’emplacement d’un fichier ou d’un répertoire. Par exemple, le chemin d’accès à une vidéo peut être
C:\Vidéo\Archives\video_01.mkv
sur Windows.
Dans cet exemple, Image
, Musique
et Vidéo
sont des sous-répertoires de Racine
.
Le répertoire Vidéo
contient un sous-répertoire Archives
et un fichier video_03.mkv
.
Le répertoire Musique
est vide.
Chemins relatif vs absolu
Un chemin absolu part toujours de la racine.
Exemple:
C:\Vidéo\Archives\video_01.mkv
Un chemin relatif part d’où nous sommes. Par exemple, si un programme est exécuté dans le répertoire Vidéo
, son point de départ sera Vidéo
. Les ..
permettront de remonter au répertoire parent.
Exemples (à partir de Vidéo
):
- Pour accéder à
video_01.mkv
:.\Archives\video_01.mkv
- Pour accéder à
image_01.png
:..\Image\image_01.png
Gestion de fichiers et répertoires
Lister les fichiers et les répertoires
liste = os.listdir() # liste des fichiers/répertoires du répertoire courant
liste = os.listdir('foo') # liste des fichiers/répertoires du sous-répertoire "foo"
liste = os.listdir('..') # liste des fichiers/répertoires du répertoire parent
liste = os.listdir('C:\Vidéo\Archives') # liste des fichiers/répertoires du répertoire "Archives"
Créer un répertoire
os.mkdir('nouveau_repertoire') # Crée le répertoire "nouveau_repertoire" dans le répertoire courant
Combiner des composants de chemin
chemin = os.path.join('repertoire', 'fichier.txt') # Crée le chemin à partir des chaines "repertoire" et "fichier.txt"
os.path.join
prend en compte le système d’exploitation pour combiner les composantes du chemin.
Sous Windows, chemin
sera repertoire\fichier.txt
, tandis que sous Linux, il sera repertoire/fichier.txt
.
Ce qui permettra à ce programme s’exécuter peu importe le système d’exploitation.
Vérifier si un chemin est un fichier/répertoire
est_fichier = os.path.isfile('repertoire/fichier.txt') # Retourne Vrai si le fichier existe, sinon Faux
est_repertoire = os.path.isdir('repertoire') # Retourne Vrai si le répertoire existe, sinon Faux
La fonction os.path.exists()
est plus générale et indique si le chemin existe. Cette fonction est très utilise pour éviter les erreurs:
if os.path.exists('repertoire/fichier.txt'): # Si le fichier n'existe pas, la lecture n'aura pas lieu
with open('repertoire/fichier.txt', 'r') as fichier:
contenu = fichier.read()
print(contenu)
Supprimer un fichier/répertoire
os.remove('fichier.txt') # Supprime le fichier "fichier.txt"
os.rmdir('repertoire') # Supprime le répertoire "repertoire" et tout ce qui se trouve à l'intérieur
Gestion de processus
Exécuter une commande système
La fonction os.system()
permet d’exécuter des commandes système.
Les commandes système sont dépendantes de votre système d’exploitation (ex: Windows vs Linux).
Donc, les commandes devront être ajustées en conséquence.
Par exemple, sous Windows, la commande dir
permet d’obtenir la liste des fichiers et répertoires. Tandis que sous Linux, la commande est ls
.
os.system('ls') # Liste des fichiers et répertoire sous Linux
os.system('dir') # Liste des fichiers et répertoire sous Windows
Cet exemple est seulement pour illustrer la différence entre les systèmes d’exploitation.
Il aurait été préférable d’utiliser la commande os.listdir()
qui a la même fonctionnalité que ls
ou dir
, mais fonctionne sur toutes les plateformes.
Il est possible d’exécuter d’autres programmes à l’aide la de commande os.system()
. Par exemple, il est possible d’exécuter un autre script Python
:
# premierProgramme.py
print('Bonjour')
# deuxiemeProgramme.py
os.system('python premierProgramme.py')
Si on exécute deuxiemeProgramme.py
, celui-ci appellera à son tour le programme premierProgramme.py
qui lui affichera Bonjour
.
Librairie sys
Ce module fournit des fonctions et des variables utilisées pour manipuler différentes parties de l’environnement d’exécution Python, telles que les arguments de la ligne de commande, les variables d’environnement, le chemin de recherche de modules, etc.
Les arguments
Il est possible de lancer un programme python avec des arguments. On utilise sys.argv
pour accéder à ceux-ci. sys.argv
est une liste contenant les arguments sous forme de chaîne de caractères (string
). La première valeur est le nom du programme.
Exemple:
# addition.py
# Programme utilisant des arguments
import sys
print("Programme:", sys.argv[0]) # Affichera le nom du programme, soit "addition.py"
nombre_1 = int(sys.argv[1]) # "nombre_1" devient la valeur numérique du 1er argument
nombre_2 = int(sys.argv[2]) # "nombre_2" devient la valeur numérique du 2e argument
reponse = nombre_1 + nombre_2
print("Réponse:", reponse)
Pour lancer le programme à la ligne de commande:
# Windows
python addition.py 2 3 # Devrait donner la réponse 5
# Linux
python3 addition.py 2 3
Essayez de lancer le programme sans argument.
Modifiez le programme pour éviter cette erreur.
Sortir du programme
Si tout ce passe bien, les programmes terminent normalement lorsqu’il n’y a plus de code à exécuter.
Dans ce cas, le programme retournera la valeur 0
.
Si une erreur se produit en cours d’exécution et que le programme s’arrête anormalement, une valeur différente de 0
sera retournée.
L’utilisateur du programme pourra utiliser la documentation pour connaître la signification de ce code d’erreur.
La fonction sys.exit()
permet de sortir du programme immédiatement en retournant un code.
# addition_2.py
# Programme utilisant des arguments
import sys
print("Programme:", sys.argv[0]) # Affichera le nom du programme, soit "addition.py"
if len(sys.argv) != 3:
print("Vous devez fournir 2 arguments pour l'addition")
sys.exit(1)
if not sys.argv[1].isdigit() or not sys.argv[2].isdigit():
print("Vous devez fournir des arguments numériques pour l'addition")
sys.exit(2)
nombre_1 = int(sys.argv[1]) # "nombre_1" devient la valeur numérique du 1er argument
nombre_2 = int(sys.argv[2]) # "nombre_2" devient la valeur numérique du 2e argument
reponse = nombre_1 + nombre_2
print("Réponse:", reponse)
Exemple :
# Windows
python addition_2.py 2 3 # Devrait donner la réponse 5
echo %ERRORLEVEL% # Devrait donner 0
python addition_2.py 2 # Erreur
echo %ERRORLEVEL% # Devrait donner 1
python addition_2.py 2 a # Erreur
echo %ERRORLEVEL% # Devrait donner 2
# Linux
python3 addition_2.py 2 # Erreur
echo $? # Devrait donner 1
Valeur Maximale
En python, la valeur maximale d’un int
est de 9223372036854775807.
Il est possible d’utiliser cette valeur à l’aide de sys.maxsize
.
import sys
print('Maximum :', sys.maxsize) # Affiche 9223372036854775807
Exemple d’utilisation pour trouver la valeur minimale dans une liste:
import sys
ma_liste = [7,5,3,4,5,7,6,1,2,6]
minimum_trouve = sys.maxsize # On initialise minimum_trouve avec une très grande valeur
for val in ma_liste:
if val < minimum_trouve:
minimum_trouve = val
print("La valeur minimale est :", minimumTrouve)