Здравствуйте, так как я разрабатываю одну облачную функцию python для построения гистограммы из CSV, хранящегося в корзине,
Я пытался сделать следующее:
def plot(event, context):
client = storage.Client()
csv = client.bucket(event['bucket']).blob(event['name']).download_as_string()
df = pd.read_csv(io.BytesIO(csv), index_col=0)
objects = df['filepart']
y_pos = np.arange(len(objects))
performance = df['confidence']
plt.bar(y_pos, performance, align='center', alpha=0.99,color='blue')
plt.xticks(y_pos, objects,rotation=90)
plt.ylabel('')
plt.title('')
здесь я сохраняю изображение на диск:
plt.savefig('foo.png')
my_bucket = "clusters_sklearn"
затем я загружаю файл с именем файла следующим образом в мое ведро:
client = get_client()
bucket = client.get_bucket(my_bucket)
bucket.blob("foo.png").upload_from_filename("foo.png")
with open("foo.png", "rb") as my_file:
bucket.blob("foo.png").upload_from_file(my_file)
Однако, чтобы использовать эту функцию в облачной функции, так как из-за этого у меня нет доступа к физическому диску, мне нужно изменить эту часть:
plt.savefig('foo.png')
А также изменить способ загрузки с диска в корзину:
bucket.blob("foo.png").upload_from_filename("foo.png")
with open("foo.png", "rb") as my_file:
bucket.blob("foo.png").upload_from_file(my_file)
Так что я хотел бы поблагодарить за поддержку изменения моего кода для использования в облачной функции Google,
мой полный код выглядит заранее, спасибо:
def plot(event, context):
client = storage.Client()
csv = client.bucket(event['bucket']).blob(event['name']).download_as_string()
df = pd.read_csv(io.BytesIO(csv), index_col=0)
objects = df['filepart']
y_pos = np.arange(len(objects))
performance = df['confidence']
plt.bar(y_pos, performance, align='center', alpha=0.99,color='blue')
plt.xticks(y_pos, objects,rotation=90)
plt.ylabel('')
plt.title('')
plt.savefig('foo.png')
my_bucket = "clusters_sklearn"
client = get_client()
bucket = client.get_bucket(my_bucket)
bucket.blob("foo.png").upload_from_filename("foo.png")
with open("foo.png", "rb") as my_file:
bucket.blob("foo.png").upload_from_file(my_file)