Я пытаюсь понять, как записать многострочный CSV-файл в облачное хранилище Google. Я просто не слежу за документация

Близко к здесь: Невозможно прочитать CSV-файл, загруженный в облачное хранилище Google. ковш

Примере:

from google.cloud import storage
from oauth2client.client import GoogleCredentials
import os

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "<pathtomycredentials>"

a=[1,2,3]

b=['a','b','c']

storage_client = storage.Client()
bucket = storage_client.get_bucket("<mybucketname>")

blob=bucket.blob("Hummingbirds/trainingdata.csv")

for eachrow in range(3):
    blob.upload_from_string(str(a[eachrow]) + "," + str(b[eachrow]))

Это дает вам одну строчку в облачном хранилище Google

3,c

Ясно, что каждый раз открывал новый файл и записывал строку.

Хорошо, а как насчет добавления новой строки разделителя?

for eachrow in range(3):
    blob.upload_from_string(str(a[eachrow]) + "," + str(b[eachrow]) + "\n")

Это добавляет разрыв строки, но снова пишет с начала.

Может кто-нибудь проиллюстрировать, что такое подход? Я мог бы объединить все свои строки в одну строку или записать временный файл, но это кажется очень уродливым.

Возможно, с открытым как файл?

3
bw4sz 25 Апр 2017 в 06:54

2 ответа

Лучший ответ

Метод blob.upload_from_string(data) создает новый объект, содержимое которого точно соответствует содержимому строки data. Он перезаписывает существующие объекты, а не добавляется.

Самым простым решением было бы записать весь CSV во временный файл, а затем загрузить этот файл в GCS с помощью blob.upload_from_filename(filename).

1
Brandon Yarbrough 21 Ноя 2019 в 18:09

Пожалуйста, обратитесь к ответу ниже, надеюсь, это поможет.

import pandas as pd
 data = [['Alex','Feb',10],['Bob','jan',12]]
 df = pd.DataFrame(data,columns=['Name','Month','Age'])
 print df

< Сильный > Выход

   Name Month  Age
0  Alex   Feb   10
1   Bob   jan   12

Добавить строку

row = ['Sally','Oct',15]
df.loc[len(df)] = row
print df

< Сильный > Выход

     Name Month  Age
 0   Alex   Feb   10
 1    Bob   jan   12
 2  Sally   Oct   15

запись / копирование в GCP Bucket с использованием gsutil

  df.to_csv('text.csv', index = False)
 !gsutil cp 'text.csv' 'gs://BucketName/folderName/'
0
Tokci 18 Фев 2019 в 12:12
43601294