No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Manejo de rutas del sistema: PyFilesystem2

9/14
Recursos

Objetivo

Crear la ruta 鈥./data/raw/鈥 independiente del sistema operativo. Ahora usaremos PyFilesystem2.

Implementaci贸n

Dentro del notebook de jupyter:

import fs

fs.open_fs(".")  # Abre una conexi贸n con el path actual (OSFS)

CURRENT_DIR = fs.open_fs(".")

CURRENT_DIR.exists(".")  # Revisa si el directorio existe
DATA_DIR.listdir(".")  # Muestra el contenido dentro de la ruta.
  • PyFilesystem2 genera un objeto OSFS (Operating System Filesystem).

  • El inconveniente con este m贸dulo es que el objeto OSFS solo detecta los objetos que existen en la ruta actual, por lo que si intentas acceder a un archivo ubicado en el directorio padre 鈥溾︹ te saltar谩 un IndexError.

  • Si necesitas que el objeto OSFS tambi茅n detecte el directorio padre, adem谩s de las carpetas 鈥渄ata鈥 y 鈥渞aw鈥, vuelve a generar el objeto de la siguiente forma:

fs.open_fs("../data/raw/")  # Ruta objetivo

Contribuci贸n creada por: N茅stor Arellano.

Aportes 19

Preguntas 5

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Veo muchos comentarios indicando que os y pathlib son mejores que PyFilesystem. Creo que tienen sus razones dado que PyFilesystem es orientado a objetos y de pronto muchos no nos gusta c贸mo funciona.

El poder de est谩 librer铆a se ve cuando tengamos las siguientes condiciones:

  1. Necesitamos que funcione sin importar si estamos en Windows, Linux, Mac, AWS S3, Archivos zip, Servidores FTP, etc.
  2. Es util para crear Test unitarios dado que se puede manejar archivos en memoria y no archivos del disco duro.

馃殭馃挩_ _ _ 馃殫馃挩 _ _ _ 馃浕馃挩
Bentley, Ferrari o Aston Martin鈥
La pregunta no radica en cu谩l es mejor, sino en cu谩l se adapta mejor a tus necesidades.

me quedo con os

Manejo de rutas del sistema: PyFilesystem2

PyFilesystem2 genera un objeto OSFS (Operating System Filesystem). El inconveniente con este m贸dulo es que el objeto OSFS solo detecta los objetos que existen en la ruta actual, por lo que si intentas acceder a un archivo ubicado en el directorio padre聽鈥溾︹聽te saltar谩 un聽IndexError.

  • Mostrar la ruta actual
import fs
fs.open_fs(".")
  • Verificar que un directorio exista
#Verifica que el directorio exista
CURRENT_DIR = fs.open_fs(".")
CURRENT_DIR.exists("/ruta_prueba")
  • Error al verificar la existencia del directorio padre. ATENTOS
#Esta libreria trabaja con conexiones
#Solo existe lo que esta en la ruta que se define cono conexion
#Marca error al verificar que existe el directorio padre de la ruta
CURRENT_DIR.exists("..")
  • Ir a una carpeta especifica
#Ir a la carpeta /data/raw
#la ventaja de esta libreria es que trabajas con slash (/) en cualquier Sistema operativo
fs.open_fs("../data/raw")
  • Listar archivos de una carpeta
#Listar lo que hay en una carpeta
DATA_DIR = fs.open_fs("../data/raw")
DATA_DIR.listdir(".")
  • Iterar archivos de una carpeta
#Iterar archivos de una carpeta
for path in DATA_DIR.walk.files():
    print(path)
  • Mostrar contenido de los archivos iterados
#mostrar contenido de los archivos iterados
for path in DATA_DIR.walk.files():
    print(path)
    with DATA_DIR.open(path) as data_file:
        print(data_file.readlines())
  • Crear una carpeta
#Crear una carpeta
#solo se puede crear dentro de la conexion donde te encuentras
DATA_DIR.makedir("external_fs", recreate=True)

鈥渓o est谩s haciendo excelente鈥. No tanto. Quise crear una carpeta y no pude 馃槮

No entiendo para que sirve esto 馃槮

No hay una respuesta definitiva sobre cu谩l es mejor entre os, pathlib y PyFilesystem2, ya que cada una tiene sus propias ventajas y casos de uso.

  • 鈥渙s鈥 es un m贸dulo incorporado en Python que ofrece funcionalidades b谩sicas para interactuar con el sistema operativo, como manipulaci贸n de archivos, navegaci贸n de directorios y ejecuci贸n de comandos. Es simple y eficiente para operaciones b谩sicas en sistemas de archivos locales.

  • 鈥減athlib鈥 es una biblioteca incorporada en Python que proporciona una interfaz orientada a objetos para manipular rutas de archivos y directorios. Es intuitiva y f谩cil de usar, pero su funcionalidad se limita a operaciones b谩sicas en sistemas de archivos locales.

  • 鈥淧yFilesystem2鈥 es una biblioteca m谩s vers谩til que proporciona una abstracci贸n com煤n para trabajar con diferentes sistemas de archivos, tanto locales como remotos. Ofrece una amplia gama de funcionalidades, incluyendo soporte para operaciones avanzadas, como la lectura/escritura en sistemas de archivos remotos y la manipulaci贸n de archivos comprimidos.

La elecci贸n entre estas bibliotecas depende de tus necesidades espec铆ficas. Si solo necesitas funcionalidades b谩sicas en sistemas de archivos locales, 鈥渙s鈥 y 鈥減athlib鈥 son opciones adecuadas y m谩s livianas. Si requieres una mayor flexibilidad para trabajar con diferentes sistemas de archivos, incluyendo sistemas remotos, y funcionalidades adicionales, 鈥淧yFilesystem2鈥 ser铆a la mejor opci贸n.

Entendido y esta librer铆a me gusto mucho.

#
import fs
#
CURRENT_DIR =fs.open_fs(".")
print(CURRENT_DIR.exists("."))
CURRENT_DIR.exists("..")
#
DATA_DIR = fs.open_fs("../")
print(DATA_DIR.exists(""))
DATA_DIR.listdir(".")

for path in DATA_DIR.walk.files():
    print(path)

    with DATA_DIR.open(path) as data_file:
        print(data_file.read())

for path in DATA_DIR.walk.dirs():
    print(path)
#
DATA_DIR.makedir("external_fs",recreate=True)
#
sub_data_dir = DATA_DIR.makedirs("external_fs/fs/nested", recreate=True)
sub_data_dir.makedir("test")

No entendia el por qu茅 del par谩metro recreate del makedir. Fui a la documentaci贸n y lo explica, les dejo la captura:

PyFilesystem2 es una biblioteca de Python que proporciona una abstracci贸n de alto nivel sobre sistemas de archivos, lo que simplifica en gran medida el manejo de rutas y archivos en diferentes sistemas de archivos y protocolos. PyFilesystem2 unifica la API de diferentes sistemas de archivos en una interfaz com煤n, lo que facilita la escritura de c贸digo que funcione en m煤ltiples plataformas y sistemas de almacenamiento
.
PyFilesystem2 simplifica el manejo de rutas y archivos al proporcionar una interfaz consistente y poderosa para interactuar con sistemas de archivos. Puedes usar las mismas operaciones en diferentes sistemas de archivos sin preocuparte por las diferencias de API. Adem谩s de los sistemas de archivos locales (osfs), PyFilesystem2 admite varios otros sistemas y protocolos de almacenamiento.

No me convence, creo que es m谩s complicado que soluciones anteriores

PyFilesystem2

Hola. 驴Qu茅 problema hay con que en un proyecto se importen las tres librer铆as: import os, import pathlib e import fs y se trabajen con cada una de ellas dependiendo de nuestras necesidades y fortalezas que cada una tenga?

Al estudiar los 3 quedo bastante claro. Eso si son extensos toca profundizar bastante. Interesante como fs deja er el contenido.

Implementaci贸n
Dentro del notebook de jupyter:

import fs

fs.open_fs(".")  # Abre una conexi贸n con el path actual (OSFS)

CURRENT_DIR = fs.open_fs(".")

CURRENT_DIR.exists(".")  # Revisa si el directorio existe
DATA_DIR.listdir(".")  # Muestra el contenido dentro de la ruta.
PyFilesystem2 genera un objeto OSFS (Operating System Filesystem).

El inconveniente con este m贸dulo es que el objeto OSFS solo detecta los objetos que existen en la ruta actual, por lo que si intentas acceder a un archivo ubicado en el directorio padre 鈥溾︹ te saltar谩 un IndexError.

Si necesitas que el objeto OSFS tambi茅n detecte el directorio padre, adem谩s de las carpetas 鈥渄ata鈥 y 鈥渞aw鈥, vuelve a generar el objeto de la siguiente forma:

fs.open_fs("../data/raw/")  # Ruta objetivo

El hecho de que sea agnostico(utiliza el mismo objeto para enlistar archivos y directorios para realizar las distintas operaciones; ej: mkdir) lo hace muy especial a 鈥渇s鈥, en un futuro siento que nos hara de mucha ayuda.

good , no sabia q se podia tener ese problema 馃槂

Muy interesantes los tres, igual creo que hay que trabajar a mayor profundidad con todos para definir cual es el que mas le gusta a cada uno.