X Tutup
Skip to content

Latest commit

 

History

History
354 lines (261 loc) · 7.82 KB

File metadata and controls

354 lines (261 loc) · 7.82 KB
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.
Módulo OS de Python

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.

Rutas de Linux y Windows

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

El directorio de trabajo actual

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

Creación de nuevas carpetas

import os
# Crear directorios recursivamente (crea todos los directorios padre si es necesario)
os.makedirs('/tmp/delicious/walnut/waffles')

Rutas Absolutas vs. Relativas

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”.

Manejo de rutas absolutas

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

Manejo de rutas relativas

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

Validez de la Ruta y el Archivo

Comprobación de si existe un archivo/directorio

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

Comprobación de si una ruta es un archivo

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

Comprobación de si una ruta es un directorio

import os

# Comprobar si la ruta es un directorio
os.path.isdir('/')
True
os.path.isdir('setup.py')
False
os.path.isdir('/spam')
False

Obtener el tamaño de un archivo en bytes

import os

# Obtener tamaño del archivo en bytes
os.path.getsize('/usr/bin/python3')
776192

Listado de directorios

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']

Tamaños de archivos de directorio

ADVERTENCIA ¡Los directorios en sí también tienen un tamaño! Por lo tanto, es posible que desee comprobar si una ruta es un archivo o un directorio utilizando los métodos discutidos en la sección anterior.
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

Eliminación de archivos y carpetas

  • 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.

Recorrer un Árbol de Directorios

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

Enlaces relevantes

  • 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()
X Tutup