Cómo comprobar si un archivo es legible en Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo verificar si un archivo es legible en Python. El laboratorio comienza explorando los permisos de archivos en Linux, centrándose en los conceptos de propietario, grupo y otros, junto con los permisos de lectura, escritura y ejecución. Crearás un script de Python, examinarás sus permisos utilizando el comando ls -l e interpretarás la salida para entender quién tiene acceso para leer el archivo.

A continuación, el laboratorio te guiará en el uso de la función os.access() de Python con os.R_OK para determinar de forma programática si un archivo es legible. Finalmente, aprenderás cómo intentar abrir el archivo para lectura dentro de un bloque try...except para manejar posibles excepciones IOError, lo que proporciona un enfoque práctico para verificar la legibilidad de archivos en tu código de Python.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/FileHandlingGroup -.-> python/file_opening_closing("Opening and Closing Files") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") python/FileHandlingGroup -.-> python/file_operations("File Operations") subgraph Lab Skills python/conditional_statements -.-> lab-559513{{"Cómo comprobar si un archivo es legible en Python"}} python/standard_libraries -.-> lab-559513{{"Cómo comprobar si un archivo es legible en Python"}} python/catching_exceptions -.-> lab-559513{{"Cómo comprobar si un archivo es legible en Python"}} python/file_opening_closing -.-> lab-559513{{"Cómo comprobar si un archivo es legible en Python"}} python/file_reading_writing -.-> lab-559513{{"Cómo comprobar si un archivo es legible en Python"}} python/file_operations -.-> lab-559513{{"Cómo comprobar si un archivo es legible en Python"}} end

Comprender los permisos de archivos

En este paso, exploraremos los permisos de archivos en Linux, que son cruciales para controlar el acceso a archivos y directorios. Comprender los permisos de archivos es esencial para garantizar la seguridad e integridad de tus datos.

Cada archivo y directorio en Linux tiene permisos asociados que determinan quién puede leer, escribir o ejecutarlos. Estos permisos se clasifican en tres categorías:

  • Propietario (Owner): El usuario que es dueño del archivo o directorio.
  • Grupo (Group): El grupo al que pertenece el archivo o directorio.
  • Otros (Others): Todos los demás usuarios del sistema.

Cada categoría tiene tres tipos de permisos:

  • Lectura (Read - r): Permite al usuario ver el contenido del archivo o listar el contenido del directorio.
  • Escritura (Write - w): Permite al usuario modificar el contenido del archivo o crear, eliminar o renombrar archivos en el directorio.
  • Ejecución (Execute - x): Permite al usuario ejecutar el archivo como un programa o entrar en el directorio.

Comencemos creando un archivo y examinando sus permisos. Abre el editor VS Code y crea un nuevo archivo llamado my_script.py en el directorio ~/project. Agrega el siguiente contenido al archivo:

print("Hello, world!")

Guarda el archivo. Ahora, abre la terminal y navega hasta el directorio ~/project:

cd ~/project

Lista los archivos del directorio con información detallada utilizando el comando ls -l:

ls -l

Deberías ver una salida similar a esta:

-rw-r--r-- 1 labex labex 22 Oct 26 10:00 my_script.py

Desglosemos la salida:

  • Los primeros 10 caracteres representan los permisos del archivo.
  • El primer carácter indica el tipo de archivo: - para un archivo regular, d para un directorio, l para un enlace simbólico, etc.
  • Los siguientes tres caracteres (rw-) representan los permisos del propietario: lectura y escritura.
  • Los siguientes tres caracteres (r--) representan los permisos del grupo: solo lectura.
  • Los últimos tres caracteres (r--) representan los permisos para otros: solo lectura.
  • 1 indica el número de enlaces duros al archivo.
  • labex labex indica el propietario y el grupo del archivo.
  • 22 es el tamaño del archivo en bytes.
  • Oct 26 10:00 es la última fecha de modificación.
  • my_script.py es el nombre del archivo.

Actualmente, el archivo my_script.py tiene permisos de lectura y escritura para el propietario (tú) y permisos de solo lectura para el grupo y otros. Esto significa que puedes leer y modificar el archivo, pero otros usuarios solo pueden leerlo.

Para ejecutar el script de Python, necesitas permisos de ejecución. Intentemos ejecutar el script:

python my_script.py

Deberías ver la siguiente salida:

Hello, world!

Aunque el archivo no tiene permisos de ejecución, aún puedes ejecutarlo utilizando el intérprete de Python. El comando python en sí tiene permisos de ejecución y puede leer y ejecutar el contenido del archivo my_script.py.

En los siguientes pasos, exploraremos cómo usar Python para verificar los permisos de archivos y cómo cambiarlos utilizando comandos de Linux.

Usar os.access() con os.R_OK

En este paso, utilizaremos la función os.access() en Python para verificar si un archivo tiene permisos de lectura. La función os.access() toma dos argumentos: la ruta del archivo y una bandera de permiso. Utilizaremos os.R_OK para verificar los permisos de lectura.

Primero, creemos un nuevo archivo de Python llamado check_permissions.py en el directorio ~/project. Abre el editor VS Code y agrega el siguiente código al archivo:

import os

file_path = "my_script.py"

## Check if the file exists
if not os.path.exists(file_path):
    print(f"Error: The file '{file_path}' does not exist.")
else:
    ## Check if the file has read permissions
    if os.access(file_path, os.R_OK):
        print(f"The file '{file_path}' has read permissions.")
    else:
        print(f"The file '{file_path}' does not have read permissions.")

Guarda el archivo. Este script primero verifica si el archivo my_script.py existe. Si existe, luego utiliza os.access() con os.R_OK para verificar si el archivo tiene permisos de lectura. El script imprimirá un mensaje que indica si el archivo tiene o no permisos de lectura.

Ahora, ejecuta el script desde la terminal:

python check_permissions.py

Deberías ver la siguiente salida:

The file 'my_script.py' has read permissions.

Esto se debe a que, por defecto, el archivo my_script.py tiene permisos de lectura para el propietario, el grupo y otros.

Ahora, modifiquemos los permisos del archivo my_script.py para eliminar los permisos de lectura para todos excepto el propietario. Podemos hacer esto utilizando el comando chmod en la terminal.

chmod 600 my_script.py

Este comando establece los permisos de my_script.py para que solo el propietario tenga permisos de lectura y escritura (600 en notación octal).

Ahora, ejecuta el script check_permissions.py nuevamente:

python check_permissions.py

Ahora deberías ver la siguiente salida:

The file 'my_script.py' does not have read permissions.

Esto se debe a que hemos eliminado los permisos de lectura para el grupo y otros. La función os.access() identifica correctamente que el archivo ya no tiene permisos de lectura para el usuario que ejecuta el script (que es labex).

Finalmente, restaurémos los permisos originales del archivo my_script.py:

chmod 644 my_script.py

Este comando establece los permisos de my_script.py para que el propietario tenga permisos de lectura y escritura y el grupo y otros tengan permisos de solo lectura (644 en notación octal).

Intentar abrir un archivo para lectura

En este paso, intentaremos abrir el archivo my_script.py para lectura en Python y manejar posibles excepciones de PermissionError. Esto demostrará cómo manejar de manera adecuada situaciones en las que tu script no tiene los permisos necesarios para acceder a un archivo.

Primero, modifiquemos los permisos del archivo my_script.py para eliminar los permisos de lectura para todos excepto el propietario, como hicimos en el paso anterior:

chmod 600 my_script.py

Ahora, creemos un nuevo archivo de Python llamado open_file.py en el directorio ~/project. Abramos el editor VS Code y agreguemos el siguiente código al archivo:

file_path = "my_script.py"

try:
    with open(file_path, "r") as file:
        content = file.read()
        print("File content:")
        print(content)
except PermissionError:
    print(f"Error: You do not have permission to read the file '{file_path}'.")
except FileNotFoundError:
    print(f"Error: The file '{file_path}' was not found.")
except Exception as e:
    print(f"An unexpected error occurred: {e}")

Guardemos el archivo. Este script intenta abrir el archivo my_script.py en modo lectura ("r"). Utiliza un bloque try...except para manejar posibles errores. Si se produce un PermissionError (lo que significa que el script no tiene permisos de lectura), se imprime un mensaje de error. También maneja FileNotFoundError en caso de que el archivo no exista y una excepción genérica Exception para capturar cualquier otro error potencial.

Ahora, ejecutemos el script desde la terminal:

python open_file.py

Deberías ver la siguiente salida:

Error: You do not have permission to read the file 'my_script.py'.

Esto se debe a que hemos eliminado los permisos de lectura para el grupo y otros, y el script se está ejecutando como el usuario labex, que ya no tiene permisos de lectura para el archivo.

Ahora, restaurémos los permisos originales del archivo my_script.py:

chmod 644 my_script.py

Ejecutemos de nuevo el script open_file.py:

python open_file.py

Ahora deberías ver el contenido del archivo my_script.py impreso en la consola:

File content:
print("Hello, world!")

Esto demuestra cómo manejar los permisos de archivos en Python y cómo manejar de manera adecuada situaciones en las que tu script no tiene los permisos necesarios para acceder a un archivo. Al utilizar bloques try...except, puedes evitar que tu script se bloquee y proporcionar mensajes de error informativos al usuario.

Resumen

En este laboratorio (lab), exploramos los permisos de archivos en Linux, centrándonos en cómo controlan el acceso a archivos y directorios. Aprendimos que los permisos se clasifican en tres categorías: propietario, grupo y otros, cada uno con permisos de lectura, escritura y ejecución.

Creamos un archivo de Python y utilizamos el comando ls -l para examinar sus permisos, comprendiendo cómo la salida representa el tipo de archivo y los permisos otorgados a cada categoría de usuarios. Este conocimiento básico es crucial para entender cómo verificar la legibilidad de archivos en los pasos posteriores.