HOWTO · Python
So verwenden Sie den cat-Befehl in Python
Erfahren Sie in dieser umfassenden Anleitung, wie Sie den cat-Befehl in Python verwenden. Entdecken Sie Methoden wie die Funktion open, das Modul pathlib und subprocess, um Dateien effizient zu lesen und zu bearbeiten. Ideal für Anfänger und erfahrene Programmierer, die ihre Fähigkeiten im Umgang mit Dateien in Python verbessern möchten.
Auf dieser Seite
Python enthält keinen cat-Befehl. Um eine Datei aus Python anzuzeigen, verwenden Sie open() oder pathlib; rufen Sie das externe Dienstprogramm cat nur mit subprocess auf, wenn Sie genau diesen Unix-Befehl benötigen. Die Python-Ansätze funktionieren plattformübergreifend und vermeiden den Start eines weiteren Prozesses.
Verwenden Sie open(), um eine Datei zu lesen und anzuzeigen
Verwenden Sie open() als Kontextmanager, um eine Textdatei zu lesen. Das Beispiel erstellt seine eigene Eingabedatei, sodass Sie es unverändert ausführen können. Es gibt die UTF-8-Kodierung an, und der with-Block schließt die Datei nach dem Lesen.
Führen Sie dieses Beispiel aus:
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="")
Vermeiden Sie es bei einer großen Datei, den gesamten Inhalt in einen einzigen String einzulesen. Iterieren Sie stattdessen über die Datei, zum Beispiel mit for line in file:, und verarbeiten Sie jede Zeile, während sie gelesen wird.
pathlib für ein kompaktes Lesen von Dateien verwenden
pathlib.Path.read_text() ist eine kompakte Alternative, wenn die gesamte Textdatei bequem in den Speicher passt. Wie das vorherige Beispiel erstellt auch dieses seine Eingabe selbst und benennt die Kodierung ausdrücklich.
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="")
Beide Ansätze dekodieren Bytes in Text. Wählen Sie eine Kodierung, die zur Datei passt; UTF-8 ist üblich, aber Dateien von anderen Systemen können eine andere Kodierung verwenden. Verwenden Sie für große Dateien open() und verarbeiten Sie die Zeilen schrittweise, anstatt die ganze Datei zu laden.
cat mit subprocess ausführen, wenn Sie den Shell-Befehl benötigen
Wenn ein Arbeitsablauf ausdrücklich das Unix-Dienstprogramm cat erfordert, rufen Sie es mit subprocess.run() auf und übergeben Sie das Programm und den Dateipfad als separate Listenelemente. Dadurch wird eine Shell-Analyse des Pfades vermieden. Das Beispiel prüft, ob das Dienstprogramm installiert ist, erfasst seine Standardausgabe und Fehlerausgabe und meldet einen fehlenden Befehl, ohne fehlzuschlagen.
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="")
Dies ruft ein externes Programm auf; es macht cat weder zu einem Python-Befehl noch zu einer API zum Lesen von Dateien. Das Unix-Dienstprogramm ist unter Windows in der Regel nicht installiert, bevorzugen Sie daher für portable Skripte die in Python integrierten Datei-APIs. Halten Sie beim Aufruf eines externen Programms die Argumente getrennt und vermeiden Sie es, einen Shell-Befehl aus nicht vertrauenswürdigen Eingaben zusammenzusetzen. Die gegebenenfalls angezeigte Meldung des Beispiels bleibt auf Englisch, da die Code- und Ausgabeblöcke unverändert beibehalten werden.
Fazit
Verwenden Sie open() für die zeilenweise Verarbeitung oder ein direktes Lesen der gesamten Datei, und verwenden Sie pathlib, wenn die pfadbasierte Methode read_text() den Code klarer macht. Führen Sie cat nur dann über subprocess aus, wenn das externe Unix-Dienstprogramm selbst erforderlich ist. Methoden für die gesamte Datei belegen Speicher proportional zur Dateigröße; verarbeiten Sie große Dateien schrittweise.
FAQ
-
Was ist der
cat-Befehl?
Es ist ein Unix-Dienstprogramm, das Dateien anzeigt oder aneinanderhängt. Es ist nicht in Python integriert. -
Kann ich
catunter Windows ausführen?
In der Regel ist es standardmäßig nicht verfügbar. Pythonsopen()undpathlibbieten portable Möglichkeiten, Dateien zu lesen; Windows hat zwar eigene Shell-Befehle, aber diese sind nicht das Unix-Dienstprogramm. -
Sollte ich
subprocessoderopen()verwenden, um eine Datei zu lesen?
Verwenden Sieopen()oderpathlibfür den gewöhnlichen Dateizugriff. Verwenden Siesubprocess, wenn Siecatoder ein anderes externes Programm ausführen müssen. -
Können diese Methoden große Dateien verarbeiten?
Das Lesen einer ganzen Datei mitread()oderread_text()speichert ihren Inhalt im Speicher. Verwenden Sie für große Dateienopen()und verarbeiten Sie jeweils eine Zeile.