| title | Módulo OS de Python - Hoja de Trucos de Python |
|---|---|
| description | Este módulo proporciona una forma portátil de utilizar la funcionalidad dependiente del sistema operativo. |
Este módulo proporciona una forma portable de utilizar la funcionalidad dependiente del sistema operativo.
Pathlib vs Módulo OS El módulo pathlib proporciona mucha más funcionalidad que la que se enumera aquí, como obtener el nombre del archivo, obtener la extensión del archivo, leer/escribir un archivo sin abrirlo manualmente, etc. Consulte la documentación oficial si tiene la intención de saber más.Para una mirada más profunda a ambos, consulte la página Rutas de Archivos y Directorios.
En Windows, las rutas se escriben usando barras invertidas (\) como separador entre los nombres de las carpetas. En sistemas operativos basados en Unix como macOS, Linux y BSDs, se utiliza la barra inclinada (/) como separador de ruta. Unir rutas puede ser un dolor de cabeza si su código necesita funcionar en diferentes plataformas.
Afortunadamente, Python nos proporciona os.path.join para manejar esto.
import os
# Unir componentes de ruta usando el separador correcto para el SO
os.path.join('usr', 'bin', 'spam')usr\bin\spam
Unir rutas es útil si necesita crear diferentes rutas de archivo bajo el mismo directorio.
my_files = ['accounts.txt', 'details.csv', 'invite.docx']
# Unir cada nombre de archivo con el directorio base
for filename in my_files:
print(os.path.join('/home/labex/project', filename))/home/labex/project/accounts.txt
/home/labex/project/details.csv
/home/labex/project/invite.docx
import os
# Obtener el directorio de trabajo actual
os.getcwd()/home/labex/project
# Cambiar el directorio de trabajo actual
os.chdir('/usr/bin')
# Verificar el cambio
os.getcwd()/usr/bin
import os
# Crear directorios recursivamente (crea todos los directorios padre si es necesario)
os.makedirs('/tmp/delicious/walnut/waffles')Hay dos formas de especificar una ruta de archivo.
- Una ruta absoluta, que siempre comienza con la carpeta raíz
- Una ruta relativa, que es relativa al directorio de trabajo actual del programa
También están las carpetas punto (.) y punto-punto (..). Estas no son carpetas reales, sino nombres especiales que se pueden usar en una ruta. Un solo punto (“dot”) para un nombre de carpeta es una abreviatura de “este directorio”. Dos puntos (“dot-dot”) significa “la carpeta padre”.
Para ver si una ruta es una ruta absoluta:
import os
# Comprobar si la ruta es absoluta (comienza con la raíz)
os.path.isabs('/')True
# Las rutas relativas devuelven False
os.path.isabs('..')False
También puede extraer una ruta absoluta:
import os
# Obtener el directorio actual primero
os.getcwd()/home/labex/project
# Convertir ruta relativa a ruta absoluta
os.path.abspath('..')/home
Puede obtener una ruta relativa desde una ruta de inicio hasta otra ruta.
import os
# Obtener ruta relativa desde la ruta de inicio hasta la ruta de destino
os.path.relpath('/etc/passwd', '/')etc/passwd
import os
# Comprobar si la ruta existe (archivo o directorio)
os.path.exists('.')True
os.path.exists('setup.py')True
os.path.exists('/etc')True
os.path.exists('nonexistentfile')False
import os
# Comprobar si la ruta es un archivo
os.path.isfile('setup.py')True
os.path.isfile('/home')False
os.path.isfile('nonexistentfile')False
import os
# Comprobar si la ruta es un directorio
os.path.isdir('/')True
os.path.isdir('setup.py')False
os.path.isdir('/spam')False
import os
# Obtener tamaño del archivo en bytes
os.path.getsize('/usr/bin/python3')776192
import os
# Listar todos los archivos y directorios en la ruta especificada
os.listdir('/usr/bin')['0409', '12520437.cpx', '12520850.cpx', '5U877.ax', 'aaclient.dll',
--snip--
'xwtpdui.dll', 'xwtpw32.dll', 'zh-CN', 'zh-HK', 'zh-TW', 'zipfldr.dll']
import os
total_size = 0
# Calcular el tamaño total de todos los archivos en el directorio
for filename in os.listdir('/usr/bin'):
# Unir la ruta del directorio con el nombre del archivo y obtener el tamaño
total_size = total_size + os.path.getsize(os.path.join('/usr/bin', filename))
print(total_size)1117846456
-
Llamar a
os.unlink(path)eliminará el archivo en la ruta. -
Llamar a
os.rmdir(path)eliminará la carpeta en la ruta. Esta carpeta debe estar vacía de cualquier archivo o carpeta.
import os
# Recorrer el árbol de directorios recursivamente
for folder_name, subfolders, filenames in os.walk('/tmp/delicious'):
print(f'La carpeta actual es {folder_name}')
# Iterar a través de subdirectorios
for subfolder in subfolders:
print(f'SUBCARPETA DE {folder_name}: {subfolder}')
# Iterar a través de archivos
for filename in filenames:
print(f'ARCHIVO DENTRO DE {folder_name}: filename{filename}')
print('')La carpeta actual es /tmp/delicious
SUBCARPETA DE /tmp/delicious: cats
SUBCARPETA DE /tmp/delicious: walnut
ARCHIVO DENTRO DE /tmp/delicious: spam.txt
La carpeta actual es /tmp/delicious/cats
ARCHIVO DENTRO DE /tmp/delicious/cats: catnames.txt
ARCHIVO DENTRO DE /tmp/delicious/cats: zophie.jpg
La carpeta actual es /tmp/delicious/walnut
SUBCARPETA DE /tmp/delicious/walnut: waffles
La carpeta actual es /tmp/delicious/walnut/waffles
ARCHIVO DENTRO DE /tmp/delicious/walnut/waffles: butter.txt
- Hoja de trucos: Ruta de Archivo y Directorio
- Hoja de trucos: Lectura y Escritura de Archivos
- Blog: Fundamentos de Pathlib
- Módulo: pathlib
- open()
- str()