Cambiar permisos de archivo en Python

Olorunfemi Akinlua 21 junio 2023
  1. Permisos de archivos del sistema operativo en Python
  2. Use chmod() para cambiar los permisos de archivo en Python
Cambiar permisos de archivo en Python

Cuando se trabaja con archivos dentro de Python o alrededor de una aplicación de Python, puede ser imperativo tener los permisos de archivo adecuados para ayudar a lograr las operaciones previstas. Desde archivos de script de trabajo hasta exportaciones de datos, los archivos creados, actualizados o administrados por las aplicaciones de Python también se pueden trabajar con el código de Python.

Por lo general, la forma habitual para que la mayoría de los desarrolladores trabajen con permisos de archivo es usar secuencias de comandos o comandos de línea de comandos. Sin embargo, es posible cambiar los permisos de archivo dentro de Python utilizando bibliotecas integradas específicas y sus métodos.

Este artículo discutirá cómo cambiar los permisos de archivo en Python.

Permisos de archivos del sistema operativo en Python

Dentro de los sistemas operativos, desde Windows hasta Linux, diferentes permisos son nativos de ellos. Los permisos para leer, escribir y ejecutar se establecen en los archivos según su finalidad.

El Explorador de archivos a menudo proporciona interfaces de usuario que permiten a los usuarios típicos cambiar los permisos de archivo otorgados a un archivo. Sin embargo, para la mayoría de los desarrolladores, la interfaz de línea de comandos es donde sucede.

Para Linux (generalmente sistemas Unix) e incluso Windows, puede verificar los permisos del archivo, entre otra información que contiene un archivo.

En Windows:

ls

Producción :

Directory: C:\Users\USER

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         7/13/2022   8:09 PM                .android
d-----         9/23/2022   8:11 PM                .vscode
d-r---          5/9/2022   1:34 PM                3D Objects
d-----         5/12/2022  11:49 PM                Apple
d-----         8/30/2022   1:20 PM                Autodesk
d-r---         3/18/2022   6:34 AM                Contacts
d-r---         9/23/2022   8:19 PM                Desktop
d-r---         9/23/2022   8:52 PM                Documents
d-r---         9/28/2022  12:48 PM                Downloads
d-r---         3/18/2022   6:34 AM                Favorites
d-r---         4/28/2022  11:03 AM                Links
d-r---         7/16/2022  10:41 PM                Music
d-r---         4/11/2022  11:39 PM                OneDrive
d-r---         9/22/2022  11:13 AM                Pictures
d-r---         3/18/2022   6:34 AM                Saved Games
d-r---         3/18/2022   6:35 AM                Searches
d-r---         9/26/2022   2:49 PM                Videos
-a----         9/23/2022   8:25 PM              5 .node_repl_history
-a----         9/27/2022   2:34 AM           1100 pslog.txt

La pestaña modo contiene la información permiso de archivo, que es la primera columna que muestra el tipo de archivo.

De manera similar, para sistemas Unix como Linux, puede enumerar toda la información del archivo.

ls -la

Producción :

drwxr-xr-x   6 eva        users         1024 Jun  8 16:46 sabon
-rw-------   1 eva        users         1564 Apr 28 14:35 splus
-rw-------   1 eva        users         1119 Apr 28 16:00 splus2
-rw-r--r--   1 eva        users         9753 Sep 27 11:14 ssh_known_hosts
-rw-r--r--   1 eva        users         4131 Sep 21 15:23 swlist.out
-rw-r--r--   1 eva        users        94031 Sep  1 16:07 tarnti.zip

Además, la primera columna contiene la moda (drwxr-xr-x). En la primera columna, hay cuatro desgloses.

El primer desglose es el primer carácter que representa el tipo de archivo real. El segundo desglose (los siguientes tres caracteres) muestra los derechos de acceso (o permisos) del usuario.

El tercer desglose (los siguientes tres caracteres) muestra los permisos del grupo propietario del archivo. Y el último desglose (últimos tres caracteres) muestra los permisos de otros usuarios.

Ahora, usemos este modo drwxr-xr-x para explicarlo. Antes de continuar, necesita saber qué representan las tres letras:

  1. r significa leer.
  2. w significa escribir.
  3. x significa ejecutar.

A cada archivo o directorio se le asignan derechos de acceso para el propietario del archivo, los miembros de un grupo de usuarios relacionados y otros. Los derechos se pueden establecer en:

  1. Leer un archivo.
  2. Escriba un archivo.
  3. Ejecutar un archivo.

El primer carácter, d, indica que se trata de un directorio. Sin embargo, si el carácter es -, es un archivo típico.

Los siguientes tres conjuntos de caracteres, rwx, significa que los usuarios pueden leer, escribir y ejecutar el directorio. Los siguientes tres, r-x, significa que el grupo puede leer y ejecutar pero no escribir el directorio.

Los últimos tres, r-x, significa que otros pueden leer y ejecutar pero no escribir el directorio.

Entonces, para cambiar el permiso de un archivo en Linux, un simple comando chmod suele ser útil.

chmod u+x someFile

El u+x es el permiso otorgado a someFile.

El permiso u+x añade (+) derechos de ejecución al usuario (recordar, usuario, grupo y otros usuarios) de someFile. Recuerda, ejecutar está representado por x.

Pero podemos lograr esto dentro de Python con bastante facilidad. Con este conocimiento, ahora puede cambiar los permisos de los archivos dentro de Python sin ningún problema.

Use chmod() para cambiar los permisos de archivo en Python

El método chmod() proviene del comando chmod dentro de Linux, cuyo trabajo es cambiar el modo de un archivo o directorio. El método chmod() está disponible a través del módulo os, que es un valor predeterminado con cualquier instalación o entorno de Python.

El módulo os proporciona interfaces y métodos para permitirnos interactuar con cualquier sistema operativo. Proporciona rutinas de SO para NT o Posix, dependiendo de su sistema.

Entre muchas funciones, nos permite administrar directorios, recuperar su contenido y cambiar los comportamientos y modos dentro de dichos directorios.

Además del método chmod(), necesitamos otro módulo llamado stat, que proporciona constantes/funciones para interpretar los resultados de os.stat() y os.lstat(). Esta “estadística” proporciona los indicadores de permiso que necesitaremos para cambiar los permisos de archivo en el usuario, grupo u otros usuarios.

Los indicadores de permisos incluyen operaciones de lectura, escritura y ejecución.

Debemos importar sus módulos para usar chmod() y stat.

import os
import stat

Además, necesitamos acceder al archivo que queremos cambiar sus permisos. El módulo os también es útil para eso.

El chmod() funciona con la siguiente sintaxis:

os.chmod(filePath, permissionFlag)

Para verificar el modo de permiso actual de un archivo (digamos, un index.txt recién creado), puede usar el método stat().

perm = os.stat("index.txt")
print(perm.st_mode)

Producción :

33206

El os.stat() obtiene el estado de una ruta específica, y la propiedad st_mode proporciona los bits de permiso del archivo donde los dos primeros dígitos octales especifican el tipo de archivo y los otros cuatro son los permisos del archivo.

El archivo debe estar dentro del mismo directorio que el archivo Python o colocar la ruta completa del archivo.

Usando la notación octal (una de las dos formas de especificar permisos) para los usuarios de Linux, podemos pensar en la configuración de permisos como una serie de bits, que se pueden ver descritos en el fragmento de código a continuación.

rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000

# rwx = 111 in binary = 7
# rw- = 110 in binary = 6
# r-x = 101 in binary = 5
# r-- = 100 in binary = 4

Para cambiar el modo de permiso, puede usar las banderas de permiso stat:

import os
import stat

perm = os.stat("index.txt")
print(perm.st_mode)
os.chmod("index.txt", stat.S_IWGRP)

perm = os.stat("index.txt")
print(perm.st_mode)

Producción :

33206
33060

El primer número octal muestra el estado de los permisos antes del cambio, y el segundo número octal es el que aparece después de agregar los permisos de lectura por grupo.

Puede combinar diferentes banderas de permisos usando el | operador. En este ejemplo, agregaremos los permisos para que el usuario lea, escriba y ejecute.

import os
import stat

perm = os.stat("index.txt")
print(perm.st_mode)
os.chmod("index.txt", stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC | stat.S_IRUSR)

perm = os.stat("index.txt")
print(perm.st_mode)

Producción :

33060
33206

Hay otras banderas de permisos que se pueden ver a continuación:

  1. Indicadores stat.S_IREAD, stat.S_IWRITE y stat.S_IEXEC para agregar derechos de lectura, escritura y ejecución para un usuario a un archivo, respectivamente.
  2. Indicadores stat.S_IRGRP, stat.S_IWGRP y stat.S_IXGRP para agregar derechos de lectura, escritura y ejecución para un grupo a un archivo, respectivamente.
  3. Indicadores stat.S_IROTH, stat.S_IWOTH y stat.S_IXOTH para agregar derechos de lectura, escritura y ejecución para otros usuarios a un archivo, respectivamente.
  4. Indicadores stat.S_IRWXU, stat.S_IRWXG y stat.S_IRWXO para agregar derechos de lectura, escritura y ejecución simultáneamente para el usuario, grupo y otros usuarios, respectivamente.

Aparte de usar las banderas de permisos, puedes usar las notaciones octales dentro del método chmod(). Usemos el número octal 755, que especifica que el usuario puede leer, escribir y ejecutar, y el grupo y otros usuarios solo pueden leer y ejecutar.

os.chmod("index.txt", 0o755)

Producción :

33206

Debes agregar el prefijo 0o para indicar que es una notación octal.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Artículo relacionado - Python File