使用 python(3.8) 从 Amazon S3 获取文件时出错
ERROR in getting file from Amazon S3 using python(3.8)
我正在尝试从 Amazon S3 获取数据并将其存储到变量(文件,例如 .pkl 文件)。
我收到以下错误:
错误:
expected str, bytes or os.PathLike object, not _io.BytesIO
S3 代码
class S3Mgr:
def __init__(self,bucketName):
self.aws_access_key_id= CONFIG.S3[0]
self.aws_secret_access_key = CONFIG.S3[1]
self.region_name = CONFIG.S3[2]
self.bucketName = bucketName
def __connect(self):
self.s3 = boto3.client(
's3',
aws_access_key_id=self.aws_access_key_id,
aws_secret_access_key=self.aws_secret_access_key,
region_name=self.region_name
)
def retrieveModel(self,fileName):
self.__connect()
a = self.s3.download_fileobj(Bucket=self.bucketName, Key="fcm/project/"+str(fileName))
return a['Body'].read()
泡菜代码
import pickle
from io import BytesIO
S3obj = S3mgr("mybucket")
model = S3obj.retrieveModel("model.pkl")
data = BytesIO(model)
model = pickle.load(data)
prediction = model.predict(inputArray)
上面的 inputArray 是输入数组。
试试这个,在您的 s3Mgr class 的 retrieveModel
方法中用 get_object
替换 download_fileobj
。
像这样:
def retrieveModel(self,fileName):
self.__connect()
a = self.s3.get_object(Bucket=self.bucketName, Key="fcm/project/"+str(fileName))
return a['Body'].read()
我希望,它有效。 Ping 如果有任何进展或需要任何帮助。
干杯!
我正在尝试从 Amazon S3 获取数据并将其存储到变量(文件,例如 .pkl 文件)。
我收到以下错误:
错误:
expected str, bytes or os.PathLike object, not _io.BytesIO
S3 代码
class S3Mgr:
def __init__(self,bucketName):
self.aws_access_key_id= CONFIG.S3[0]
self.aws_secret_access_key = CONFIG.S3[1]
self.region_name = CONFIG.S3[2]
self.bucketName = bucketName
def __connect(self):
self.s3 = boto3.client(
's3',
aws_access_key_id=self.aws_access_key_id,
aws_secret_access_key=self.aws_secret_access_key,
region_name=self.region_name
)
def retrieveModel(self,fileName):
self.__connect()
a = self.s3.download_fileobj(Bucket=self.bucketName, Key="fcm/project/"+str(fileName))
return a['Body'].read()
泡菜代码
import pickle
from io import BytesIO
S3obj = S3mgr("mybucket")
model = S3obj.retrieveModel("model.pkl")
data = BytesIO(model)
model = pickle.load(data)
prediction = model.predict(inputArray)
上面的 inputArray 是输入数组。
试试这个,在您的 s3Mgr class 的 retrieveModel
方法中用 get_object
替换 download_fileobj
。
像这样:
def retrieveModel(self,fileName):
self.__connect()
a = self.s3.get_object(Bucket=self.bucketName, Key="fcm/project/"+str(fileName))
return a['Body'].read()
我希望,它有效。 Ping 如果有任何进展或需要任何帮助。
干杯!