Как создать новый файл CSV и затем сохранить его в Google Cloud Storage? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть этот код:

import csv
from google.cloud import storage
import os

os.environ["Credientials"]
storage_client = storage.Client()

mylist = ['Row1','Row2','Row3']  # Rows I'm making for CSV file

with open('Afile.csv', 'w') as myfile:
   wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)  # Making CSV file
   wr.writerow(mylist)

s = myfile

def upload_blob(bucket_name, source_file_name, destination_blob_name):
   """Uploads a file to the bucket."""
   storage_client = storage.Client()
   bucket = storage_client.get_bucket(bucket_name)
   blob = bucket.blob(destination_blob_name)
   blob.upload_from_filename(source_file_name)
   print('File {} uploaded to {}.'.format(
     source_file_name,
     destination_blob_name))

upload_blob('BucketName', s ,'storage location') # Uploading the newly made CSV file to Google Cloud Storage

Когда создается новый CSV-файл (на что указывает s), и я пытаюсь загрузить этот вновь созданный файл в хранилище Google Cloud вместо его загрузки по локальному пути к файлу. Когда я запускаю это, я получаю следующую ошибку:

TypeError: expected string or bytes-like object

Как я мог заставить это работать, чтобы я мог сделать недавно созданный файл CSV и затем загрузить его в Google Cloud Storage? Если это возможно?

Спасибо за помощь!

1 Ответ

2 голосов
/ 17 мая 2019
with open('Afile.csv', 'w') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)  # Making CSV file
    wr.writerow(mylist)

    s = myfile

Здесь s - это file like object, а не объект строки или байта. Вы передаете сам файл, а не имя файла. Вы, вероятно, должны вместо этого передать Afile.csv в виде строки.

...