HOWTO · Python

Comment utiliser la commande cat en Python

Découvrez comment utiliser la commande cat en Python grâce à ce guide complet. Explorez des méthodes telles que la fonction open, le module pathlib et subprocess pour lire et manipuler des fichiers efficacement. Parfait pour les débutants comme pour les programmeurs expérimentés qui souhaitent améliorer leurs compétences en manipulation de fichiers en Python.

Sur cette page

Python n’inclut pas de commande cat. Pour afficher un fichier depuis Python, utilisez open() ou pathlib ; n’invoquez l’utilitaire externe cat avec subprocess que lorsque vous avez spécifiquement besoin de cette commande Unix. Les approches Python fonctionnent sur toutes les plateformes et évitent de lancer un autre processus.

Utiliser open() pour lire et afficher un fichier

Utilisez open() comme gestionnaire de contexte pour lire un fichier texte. L’exemple crée son propre fichier d’entrée afin que vous puissiez l’exécuter tel quel. Il spécifie l’encodage UTF-8, et le bloc with ferme le fichier après la lecture.

Exécutez cet exemple :

from pathlib import Path
from tempfile import TemporaryDirectory

with TemporaryDirectory() as directory:
    file_path = Path(directory) / "example.txt"
    file_path.write_text("First line.\nSecond line.\n", encoding="utf-8")

    with open(file_path, "r", encoding="utf-8") as file:
        print(file.read(), end="")

Pour un fichier volumineux, évitez de lire tout son contenu dans une seule chaîne. Parcourez plutôt le fichier, par exemple avec for line in file:, et traitez chaque ligne au fur et à mesure de sa lecture.

Utiliser pathlib pour une lecture de fichier concise

pathlib.Path.read_text() est une alternative concise lorsque l’ensemble du fichier texte tient confortablement en mémoire. Comme l’exemple précédent, celui-ci crée son entrée et nomme explicitement l’encodage.

from pathlib import Path
from tempfile import TemporaryDirectory

with TemporaryDirectory() as directory:
    file_path = Path(directory) / "example.txt"
    file_path.write_text("First line.\nSecond line.\n", encoding="utf-8")
    print(file_path.read_text(encoding="utf-8"), end="")

Les deux approches décodent les octets en texte. Choisissez un encodage correspondant au fichier ; UTF-8 est courant, mais les fichiers provenant d’autres systèmes peuvent utiliser un encodage différent. Pour les fichiers volumineux, utilisez open() et traitez les lignes de manière incrémentale plutôt que de charger tout le fichier.

Exécuter cat avec subprocess lorsque vous avez besoin de la commande shell

Si un flux de travail exige spécifiquement l’utilitaire Unix cat, appelez-le avec subprocess.run() et transmettez le programme et le chemin du fichier comme des éléments de liste distincts. Cela évite l’analyse du chemin par le shell. L’exemple vérifie si l’utilitaire est installé, capture sa sortie standard et ses erreurs, et signale une commande manquante sans échouer.

from pathlib import Path
import shutil
import subprocess
from tempfile import TemporaryDirectory

with TemporaryDirectory() as directory:
    file_path = Path(directory) / "example.txt"
    file_path.write_text("First line.\nSecond line.\n", encoding="utf-8")

    cat_program = shutil.which("cat")
    if cat_program is None:
        print("cat is not available on this system.")
    else:
        result = subprocess.run(
            [cat_program, str(file_path)],
            capture_output=True,
            text=True,
            encoding="utf-8",
            check=False,
        )
        if result.returncode == 0:
            print(result.stdout, end="")
        else:
            print(result.stderr, end="")

Cela invoque un programme externe ; cela ne fait pas de cat une commande Python ni une API de lecture de fichiers. L’utilitaire Unix n’est généralement pas installé sous Windows, préférez donc les API de fichiers intégrées à Python pour des scripts portables. Lorsque vous invoquez un programme externe, gardez les arguments séparés et évitez de construire une commande shell à partir d’une entrée non fiable. Le message que l’exemple peut afficher reste en anglais, car les blocs de code et de sortie sont conservés à l’identique.

Conclusion

Utilisez open() pour un traitement ligne par ligne ou une lecture directe de tout le fichier, et utilisez pathlib lorsque sa méthode read_text(), basée sur les chemins, rend le code plus clair. N’exécutez cat via subprocess que lorsque l’utilitaire Unix externe lui-même est requis. Les méthodes portant sur tout le fichier utilisent une quantité de mémoire proportionnelle à la taille du fichier ; traitez les fichiers volumineux de manière incrémentale.

FAQ

  1. Qu’est-ce que la commande cat ?
    C’est un utilitaire Unix qui affiche ou concatène des fichiers. Il n’est pas intégré à Python.

  2. Puis-je exécuter cat sous Windows ?
    En général, il n’est pas disponible par défaut. open() et pathlib de Python offrent des moyens portables de lire des fichiers ; Windows dispose également de ses propres commandes shell, mais il ne s’agit pas de l’utilitaire Unix.

  3. Dois-je utiliser subprocess ou open() pour lire un fichier ?
    Utilisez open() ou pathlib pour l’accès ordinaire aux fichiers. Utilisez subprocess lorsque vous devez exécuter cat ou un autre programme externe.

  4. Ces méthodes peuvent-elles traiter de gros fichiers ?
    Lire un fichier entier avec read() ou read_text() stocke son contenu en mémoire. Pour les gros fichiers, utilisez open() et traitez une ligne à la fois.