Uso de Pi File System para Rutas Independientes del Sistema Operativo
Resumen
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 "data" y "raw", vuelve a generar el objeto de la siguiente forma:
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:
Necesitamos que funcione sin importar si estamos en Windows, Linux, Mac, AWS S3, Archivos zip, Servidores FTP, etc.
Es util para crear Test unitarios dado que se puede manejar archivos en memoria y no archivos del disco duro.
Wow. Gracias por la informacion.. Muy importante!
Creo que ya es muy técnico para llegar a sentir esas necesidades y mas aún comprender las diferencias
🚙💨_ _ _ 🚗💨 _ _ _ 🛻💨
Bentley, Ferrari o Aston Martin...
La pregunta no radica en cuál es mejor, sino en cuál se adapta mejor a tus necesidades.
Gran analogía amigo.
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 existaCURRENT_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 rutaCURRENT_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 operativofs.open_fs("../data/raw")
Listar archivos de una carpeta
#Listar lo que hay en una carpetaDATA_DIR = fs.open_fs("../data/raw")DATA_DIR.listdir(".")
Iterar archivos de una carpeta
#Iterar archivos de una carpetafor path in DATA_DIR.walk.files():print(path)
Mostrar contenido de los archivos iterados
#mostrar contenido de los archivos iteradosfor 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 encuentrasDATA_DIR.makedir("external_fs", recreate=True)
Gracias! buen aporte.
Muchas gracias.
me quedo con os
Aún no veo la clase, pero coincido.
TeamOS
"lo estás haciendo excelente". No tanto. Quise crear una carpeta y no pude :(
A todos nos pasa.
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.
"os" 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.
"pathlib" 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.
"PyFilesystem2" 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, "os" y "pathlib" 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, "PyFilesystem2" sería la mejor opción.
Este aporte de deberia estar dentro de los primeros. Ahora entiendo mejor la diferencia y el valor de lo enseñado en la ultima clase y en esta clase
No entiendo para que sirve esto :(
Para llamar o cargar tus datasets en tu notebook. Ya que tus datasets estarán en otra carpeta (en la carpeta datos). Esto sin importar en que sistema operativo estes trabajando . .
os, pathlib, fs, son modulos de python que nos permiten especificar rutas sin el problema de incompatibilidad que existe entre sistemas operativos. si entendiste 1 de los 3 ya tienes el asunto arreglado.
Me sale el siguiente error al ejecutar import fs, lo que no entiendo es porque pareciera como si no estuviera instalado y realmente he hecho todas las clases al pie de la letra. Como puedo solucionar?
---------------------------------------------------------------------------ModuleNotFoundErrorTraceback(most recent call last)<ipython-input-25-2e335cbbc86b>in<module>---->1import fs
ModuleNotFoundError:No module named 'fs'
Gracias!
Tenes que instalarlo
pip install fs
Asegúrate de estar usando el kernel del entorno de manejo_de_rutas
No entendia el por qué del parámetro recreate del makedir. Fui a la documentación y lo explica, les dejo la captura:
muchas gracias..!
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
no se si estoy siendo muy ingenua o exagerada, pero para un hacker todas estas librerías de manejo de rutas deben ser super importante, es mas me atreveria a decir que se saben los comando de memoria, que interesante
Con esto:
DATA_DIR.makedir("fs", recreate =True)
¿Quiere decir que hemos establecido una "sub conexión" con DATA_DIR, y podríamos tratarla como si fuera un DATA_DIR_2 = fs.open_fs(“.”) pero con una carpeta padre?
Holis platzinautas. Soy nuevo con el tema de los manejadores ¿tal vez alguien con experiencia me puede decir los pros y contra de cada uno y cuál recomiendan sobre los otros dos?
lo unico que te puedo decir es que pruebes. en distintos sitaemas operativos y quedate con el que estes mas comodo
Lo màs comùn, y lo que he visto, es que las personas usan OS para el manejo de rutas. Los otros dos no lo conocia
¿PyFilesystem2 corre en Google Colab?
Sí, PyFilesystem2 debería poder ejecutarse en Google Colab sin problemas. PyFilesystem2 es una biblioteca de Python que proporciona una API unificada para trabajar con sistemas de archivos locales y remotos, y no debería tener problemas de compatibilidad específicos con Google Colab.
Puedes instalar PyFilesystem2 en tu entorno de Google Colab utilizando pip. Para hacerlo, simplemente ejecuta la siguiente celda de código en tu cuaderno de Colab:
!pip install fs
Una vez que hayas instalado la biblioteca, puedes importarla y comenzar a usarla en tu código de Colab. Por ejemplo, puedes crear sistemas de archivos virtuales, trabajar con archivos y directorios, y realizar operaciones de E/S de manera similar a como lo harías en un entorno local.
Si encuentras algún problema o mensaje de error al usar PyFilesystem2 en Google Colab, asegúrate de que todas las dependencias necesarias estén instaladas y de que tengas los permisos adecuados para acceder a los sistemas de archivos remotos si es necesario.
Gracias @marroking99 por tu respuesta
No entendí lo del manejo agnostico. Alguien me lo puede aclarar? Que diferencia hay con OS o Pathlib? Gracias
Significa que en fs los paths serán válidos independientemente del sistema operativo en que estemos implementando o desplegando nuestro entorno.
Para que tengan una mejor comprensión de como funciona el método open_fs():