You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

2 Días
0 Hrs
1 Min
48 Seg

Manejo de rutas del sistema: PyFilesystem2

9/14
Resources

Target

Create the path "./data/raw/" independent of the operating system. Now we will use PyFilesystem2.

Implementation

Inside the jupyter notebook:

import fs fs.open_fs(".") # Open a connection to the current path (OSFS) CURRENT_DIR = fs.open_fs(".") CURRENT_DIR.exists(".") # Check if the directory exists DATA_DIR.listdir(".") # Show the content inside the path.
  • PyFilesystem2 generates an OSFS (Operating System Filesystem) object.

  • The drawback with this module is that the OSFS object only detects objects that exist in the current path, so if you try to access a file located in the parent directory "..." you will get an IndexError.

  • If you need the OSFS object to also detect the parent directory, in addition to the "data" and "raw" folders, regenerate the object as follows:

fs.open_fs("../data/raw/") # Target path.

Contributed by: Nestor Arellano.

Contributions 20

Questions 5

Sort by:

Want to see more contributions, questions and answers from the community?

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.

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)

me quedo con os

“lo estás haciendo excelente”. No tanto. Quise crear una carpeta y no pude 😦

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.

No entiendo para que sirve esto 😦

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

Para que tengan una mejor comprensión de como funciona el método `open_fs()`: ![](https://static.platzi.com/media/user_upload/image-446d4ccf-e9f0-4f87-9f4e-5f68e9ab3103.jpg)

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 “data” y “raw”, 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 “fs”, 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.