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)
添加换行符,但再次从头开始写入。
有人可以说明这种方法是什么吗?我可以将所有行合并为一个字符串,或者编写一个临时文件,但这看起来非常难看。
也许作为文件打开?
请参考下面的回答,希望对你有帮助。
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)
该blob.upload_from_string(data)方法创建一个新对象,其内容与字符串的内容完全相同data。它会覆盖现有对象而不是追加。
最简单的解决方案是将整个 CSV 写入临时文件,然后使用该blob.upload_from_filename(filename)函数将该文件上传到 GCS。