HOWTO · Python
Cómo usar el comando cat en Python
Aprende a usar el comando cat en Python con esta guía completa. Explora métodos como la función open, el módulo pathlib y subprocess para leer y manipular archivos de forma eficiente. Perfecto tanto para principiantes como para programadores experimentados que quieran mejorar sus habilidades de manejo de archivos en Python.
En esta página
Python no incluye un comando cat. Para mostrar un archivo desde Python, usa open() o pathlib; invoca la utilidad externa cat con subprocess solo cuando necesites específicamente ese comando de Unix. Los enfoques de Python funcionan en todas las plataformas y evitan iniciar otro proceso.
Usa open() para leer y mostrar un archivo
Usa open() como gestor de contexto para leer un archivo de texto. El ejemplo crea su propio archivo de entrada para que puedas ejecutarlo tal cual. Especifica la codificación UTF-8, y el bloque with cierra el archivo después de leerlo.
Ejecuta este ejemplo:
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="")
Para un archivo grande, evita leer todo su contenido en una sola cadena. En su lugar, itera sobre el archivo, por ejemplo con for line in file:, y procesa cada línea a medida que se lee.
Usa pathlib para una lectura de archivos concisa
pathlib.Path.read_text() es una alternativa concisa cuando todo el archivo de texto cabe cómodamente en la memoria. Al igual que el ejemplo anterior, este crea su propia entrada y nombra la codificación de forma explícita.
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="")
Ambos enfoques decodifican los bytes a texto. Elige una codificación que coincida con el archivo; UTF-8 es habitual, pero los archivos de otros sistemas pueden usar una codificación distinta. Para archivos grandes, usa open() y procesa las líneas de forma incremental en lugar de cargar todo el archivo.
Ejecuta cat con subprocess cuando necesites el comando de shell
Si un flujo de trabajo requiere específicamente la utilidad cat de Unix, llámala con subprocess.run() y pasa el programa y la ruta del archivo como elementos de lista separados. Así se evita el análisis de la ruta por parte de la shell. El ejemplo comprueba si la utilidad está instalada, captura su salida estándar y de error, e informa de un comando ausente sin fallar.
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="")
Esto invoca un programa externo; no convierte a cat en un comando de Python ni en una API de lectura de archivos. La utilidad de Unix no suele estar instalada en Windows, así que prefiere las API de archivos integradas de Python para scripts portables. Al invocar cualquier programa externo, mantén los argumentos separados y evita construir un comando de shell a partir de entradas no confiables. El mensaje que el ejemplo puede mostrar permanece en inglés, porque los bloques de código y de salida se conservan sin cambios.
Conclusión
Usa open() para el procesamiento línea a línea o para una lectura directa de todo el archivo, y usa pathlib cuando su método read_text(), basado en rutas, haga el código más claro. Ejecuta cat mediante subprocess solo cuando se requiera la propia utilidad externa de Unix. Los métodos de archivo completo usan memoria en proporción al tamaño del archivo; procesa los archivos grandes de forma incremental.
FAQ
-
¿Qué es el comando
cat?
Es una utilidad de Unix que muestra o concatena archivos. No está integrada en Python. -
¿Puedo ejecutar
caten Windows?
Normalmente no está disponible por defecto.open()ypathlibde Python ofrecen formas portables de leer archivos; Windows también tiene comandos de shell propios, pero no son la utilidad de Unix. -
¿Debería usar
subprocessuopen()para leer un archivo?
Usaopen()opathlibpara el acceso ordinario a archivos. Usasubprocesscuando necesites ejecutarcatu otro programa externo. -
¿Pueden estos métodos manejar archivos grandes?
Leer un archivo completo conread()oread_text()almacena su contenido en la memoria. Para archivos grandes, usaopen()y procesa una línea cada vez.