Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

592
Vistas
Utilice pathlib para las rutas de S3

Me gustaría crear alguna funcionalidad para mover archivos entre S3 y mi sistema de archivos local, pero parece que pathlib combina barras inclinadas repetidas, rompiendo mi funcionalidad aws-cli:

 >>> from pathlib import Path >>> str(Path('s3://loc')) s3:/loc'

¿Cómo puedo manipular las rutas S3 de esta manera?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Usando el paquete s3path

El paquete s3path hace que trabajar con rutas S3 sea un poco menos doloroso. Es instalable desde PyPI o conda-forge . Use la clase S3Path para objetos reales en S3 y, de lo contrario, use PureS3Path , que en realidad no debería acceder a S3.

Aunque la respuesta anterior de metaperture mencionó este paquete, no incluía la sintaxis de URI.

También tenga en cuenta que este paquete tiene ciertas deficiencias que se informan en sus ediciones.

 >>> from s3path import PureS3Path >>> PureS3Path.from_uri('s3://mybucket/foo/bar') / 'add/me' PureS3Path('/mybucket/foo/bar/add/me') >>> _.as_uri() 's3://mybucket/foo/bar/add/me'

Tenga en cuenta las relaciones de instancia con pathlib :

 >>> from pathlib import Path, PurePath >>> from s3path import S3Path, PureS3Path >>> isinstance(S3Path('/my-bucket/some/prefix'), Path) True >>> isinstance(PureS3Path('/my-bucket/some/prefix'), PurePath) True

Usando pathlib.Path

Esta es una versión más perezosa de la respuesta de kichik usando solo pathlib . Este enfoque no es necesariamente recomendable. Simplemente no siempre es completamente necesario usar urllib.parse .

 >>> from pathlib import Path >>> orig_s3_path = 's3://mybucket/foo/bar' >>> orig_path = Path(*Path(orig_s3_path).parts[1:]) >>> orig_path PosixPath('mybucket/foo/bar') >>> new_path = orig_path / 'add/me' >>> new_s3_path = 's3://' + str(new_path) >>> new_s3_path 's3://mybucket/foo/bar/add/me'

Usando os.path.join

Solo para uniones simples, ¿qué os.path.join ?

 >>> import os >>> os.path.join('s3://mybucket/foo/bar', 'add/me') 's3://mybucket/foo/bar/add/me' >>> os.path.join('s3://mybucket/foo/bar/', 'add/me') 's3://mybucket/foo/bar/add/me'

Sin embargo, os.path.normpath no se puede usar de forma ingenua:

 >>> os.path.normpath('s3://mybucket/foo/bar') # Converts 's3://' to 's3:/' 's3:/mybucket/foo/bar'
over 4 years ago · Santiago Trujillo Denunciar

0

Puede intentar combinar urllib.parse con pathlib .

 from urllib.parse import urlparse, urlunparse from pathlib import PosixPath s3_url = urlparse('s3://bucket/key') s3_path = PosixPath(s3_url.path) s3_path /= 'hello' s3_new_url = urlunparse((s3_url.scheme, s3_url.netloc, s3_path.as_posix(), s3_url.params, s3_url.query, s3_url.fragment)) print(s3_new_url)

Es bastante engorroso, pero es lo que pediste.

over 4 years ago · Santiago Trujillo Denunciar

0

Uso cloudpathlib

Quería agregar esto como otra opción que tiene buen almacenamiento en caché y acceso transparente de lectura/escritura además de las manipulaciones de ruta estándar.

El paquete cloupathlib proporciona soporte de métodos pathlib para rutas S3 además de Google Cloud Storage y Azure Blob Storage.

Por ejemplo:

 from cloudpathlib import CloudPath from itertools import islice ladi = CloudPath("s3://ladi/Images/FEMA_CAP/2020/70349") ladi.parent #> S3Path('s3://ladi/Images/FEMA_CAP/2020') ladi.bucket #> 'ladi' # list first 5 images for this incident for p in islice(ladi.iterdir(), 5): print(p) #> s3://ladi/Images/FEMA_CAP/2020/70349/DSC_0001_5a63d42e-27c6-448a-84f1-bfc632125b8e.jpg #> s3://ladi/Images/FEMA_CAP/2020/70349/DSC_0002_a89f1b79-786f-4dac-9dcc-609fb1a977b1.jpg #> s3://ladi/Images/FEMA_CAP/2020/70349/DSC_0003_02c30af6-911e-4e01-8c24-7644da2b8672.jpg #> s3://ladi/Images/FEMA_CAP/2020/70349/DSC_0004_d37c02b9-01a8-4672-b06f-2690d70e5e6b.jpg #> s3://ladi/Images/FEMA_CAP/2020/70349/DSC_0005_d05609ce-1c45-4de3-b0f1-401c2bb3412c.jpg
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda