将csv写入谷歌云存储

bw4*_*4sz 5 python csv google-cloud-storage

我想了解如何将多行 csv 文件写入谷歌云存储。我只是没有遵循文档

接近这里: 无法读取上传到谷歌云存储桶的 csv 文件

例子:

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]))
Run Code Online (Sandbox Code Playgroud)

这让你在谷歌云存储上只有一行

3,c
Run Code Online (Sandbox Code Playgroud)

显然它每次打开一个新文件并写下这一行。

好的,添加一个新行 delim 怎么样?

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

添加换行符,但再次从头开始写入。

有人可以说明这种方法是什么吗?我可以将所有行合并为一个字符串,或者编写一个临时文件,但这看起来非常难看。

也许作为文件打开?

Tok*_*kci 5

请参考下面的回答,希望对你有帮助。

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

输出

   Name Month  Age
0  Alex   Feb   10
1   Bob   jan   12
Run Code Online (Sandbox Code Playgroud)

添加一行

row = ['Sally','Oct',15]
df.loc[len(df)] = row
print df
Run Code Online (Sandbox Code Playgroud)

输出

     Name Month  Age
 0   Alex   Feb   10
 1    Bob   jan   12
 2  Sally   Oct   15
Run Code Online (Sandbox Code Playgroud)

使用 gsutil 写入/复制到 GCP 存储桶

  df.to_csv('text.csv', index = False)
 !gsutil cp 'text.csv' 'gs://BucketName/folderName/'
Run Code Online (Sandbox Code Playgroud)

Python代码(文档https://googleapis.dev/python/storage/latest/index.html

from google.cloud import storage

def upload_to_bucket(bucket_name, blob_path, local_path):
    bucket = storage.Client().bucket(bucket_name)
    blob = bucket.blob(blob_path)
    blob.upload_from_filename(local_path)
    return blob.url

# method call
bucket_name = 'bucket-name' # do not give gs:// ,just bucket name
blob_path = 'path/folder name inside bucket'
local_path = 'local_machine_path_where_file_resides' #local file path
upload_to_bucket(bucket_name, blob_path, local_path)
Run Code Online (Sandbox Code Playgroud)


Bra*_*ugh 3

blob.upload_from_string(data)方法创建一个新对象,其内容与字符串的内容完全相同data。它会覆盖现有对象而不是追加。

最简单的解决方案是将整个 CSV 写入临时文件,然后使用该blob.upload_from_filename(filename)函数将该文件上传到 GCS。