Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

203
Views
¿Cómo cargar un archivo pickle desde S3 para usarlo en AWS Lambda?

Actualmente estoy tratando de cargar un archivo en escabeche de S3 en AWS lambda y almacenarlo en una lista (el encurtido es una lista).

Aquí está mi código:

 import pickle import boto3 s3 = boto3.resource('s3') with open('oldscreenurls.pkl', 'rb') as data: old_list = s3.Bucket("pythonpickles").download_fileobj("oldscreenurls.pkl", data)

Recibo el siguiente error a pesar de que el archivo existe:

 FileNotFoundError: [Errno 2] No such file or directory: 'oldscreenurls.pkl'

¿Algunas ideas?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

solución súper sencilla

 import pickle import boto3 s3 = boto3.resource('s3') my_pickle = pickle.loads(s3.Bucket("bucket_name").Object("key_to_pickle.pickle").get()['Body'].read())
over 4 years ago · Santiago Trujillo Report

0

Como se muestra en la documentación de download_fileobj , primero debe abrir el archivo en modo de escritura binaria y guardarlo en el archivo. Una vez descargado el archivo, puede abrirlo para leerlo y descifrarlo.

 import pickle import boto3 s3 = boto3.resource('s3') with open('oldscreenurls.pkl', 'wb') as data: s3.Bucket("pythonpickles").download_fileobj("oldscreenurls.pkl", data) with open('oldscreenurls.pkl', 'rb') as data: old_list = pickle.load(data)

download_fileobj toma el nombre de un objeto en S3 más un identificador en un archivo local y guarda el contenido de ese objeto en el archivo. También hay una versión de esta función llamada download_file que toma un nombre de archivo en lugar de un identificador de archivo abierto y se encarga de abrirlo por usted.

Sin embargo, en este caso probablemente sería mejor usar S3Client.get_object para evitar tener que escribir y luego leer inmediatamente un archivo. También puede escribir en un objeto BytesIO en memoria, que actúa como un archivo pero en realidad no toca un disco. Eso se vería algo como esto:

 import pickle import boto3 from io import BytesIO s3 = boto3.resource('s3') with BytesIO() as data: s3.Bucket("pythonpickles").download_fileobj("oldscreenurls.pkl", data) data.seek(0) # move back to the beginning after writing old_list = pickle.load(data)
over 4 years ago · Santiago Trujillo Report

0

Esta es la solución más fácil. Puede cargar los datos sin siquiera descargar el archivo localmente usando S3FileSystem

 from s3fs.core import S3FileSystem s3_file = S3FileSystem() data = pickle.load(s3_file.open('{}/{}'.format(bucket_name, file_path)))
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!