Как записать файл Excel в хранилище gcs из облачной функции python3.7?

# #python #pandas #google-cloud-functions #google-cloud-storage #google-api-python-client

Вопрос:

Я пытаюсь записать свой фрейм данных в корзину gcs из облачной функции, я могу писать csv, но я не могу записать файл excelfile из облачной функции. Вот мой код:

requirements.txt

 # Function dependencies, for example:
# package>=version
google-cloud-storage==1.30.0
gcsfs==0.6.2
pandas==1.1.0
pandas-gbq==0.15.0
openpyxl==3.0.5
XlsxWriter==1.3.7
 

Main.py

 import xlsxwriter
import openpyxl
import numpy as np
import pandas as pd
from pandas.io import gbq
from google.cloud import storage

# Defining Output Folder path.
output_folder = "gs://samples/results/output/"

def testing(request):
  # initialize list of lists
  data = [['tom', 10], ['nick', 15], ['juli', 14]]
  
  # Create the pandas DataFrame
  df = pd.DataFrame(data, columns = ['Name', 'Age'])
  df.to_csv(output_folder   "test_csv.csv", index=False) #able to write csv
  df.to_excel(output_folder   "test_excel.xlsx", index=False) #Error
  return None

Error: FileNotFoundError: [Errno 2] No such file or directory
 

Полная Ошибка:

 Traceback (most recent call last): File "/env/local/lib/python3.7/site-packages/xlsxwriter/workbook.py", 
line 320, in close self._store_workbook() File "/env/local/lib/python3.7/site-packages/xlsxwriter/workbook.py",
 line 638, in _store_workbook raise e File "/env/local/lib/python3.7/site-packages/xlsxwriter/workbook.py", 
line 636, in _store_workbook allowZip64=self.allow_zip64) File "/opt/python3.7/lib/python3.7/zipfile.py", 
line 1240, in __init__ self.fp = io.open(file, filemode) 
FileNotFoundError: [Errno 2] No such file or directory: 'gs://samples/results/output/test_excel.xlsx' 
During handling of the above exception, another exception occurred: Traceback (most recent call last):
 File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker_v2.py",
 line 402, in run_http_function result = _function_handler.invoke_user_function(flask.request) File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker_v2.py", line 268, in invoke_user_function return call_user_function(request_or_event)
 File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker_v2.py", line 261, in call_user_function return self._user_function(request_or_event) File "/user_code/main.py", line 24, in testing df.to_excel(output_folder   "test_excel.xlsx", index=False) File "/env/local/lib/python3.7/site-packages/pandas/core/generic.py", line 2029, in to_excel engine=engine, 
File "/env/local/lib/python3.7/site-packages/pandas/io/formats/excel.py", 
line 742, in write writer.save() File "/env/local/lib/python3.7/site-packages/pandas/io/excel/_xlsxwriter.py",
 line 193, in save return self.book.close() File "/env/local/lib/python3.7/site-packages/xlsxwriter/workbook.py", 
line 322, in close raise FileCreateError(e) xlsxwriter.exceptions.
FileCreateError: [Errno 2] No such file or directory: 'gs://samples/results/output/test_excel.xlsx'
 

Комментарии:

1. Работает ли это, если вы пишете в папке output_ /tmp/ ? Если это так, я предполагаю, что вывод файла GCS не реализован для метода to_excel, и вам нужно выполнить 2 шага: запись /tmp/ , а затем загрузить вручную в GCS.

2. Не могли бы вы добавить полную трассировку, чтобы мы могли видеть, какая часть кода вызывает исключение и для какого файла.

3. @jmcnamara df.to_excel(папка вывода «test_excel.xlsx», индекс=False) #Ошибка ошибка появляется в этой строке, потому что я могу писать csv, но не могу писать excel.

4. Это все равно помогло бы увидеть полный след.

5. @jmcnamara я обновил вопрос с полным ответом, пожалуйста, изучите его.