使用python将数据写入谷歌云存储

Posted

技术标签:

【中文标题】使用python将数据写入谷歌云存储【英文标题】:Writing data to google cloud storage using python 【发布时间】:2017-09-26 17:01:05 【问题描述】:

我找不到使用 python 将本地计算机中的数据集写入谷歌云存储的方法。我进行了很多研究,但没有找到任何关于此的线索。需要帮助,谢谢

【问题讨论】:

你找到方法了吗?似乎人们倾向于将上传与实际写入混淆 【参考方案1】:

快速示例,使用google-cloud Python 库:

from google.cloud import storage

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))

更多示例在此 GitHub 存储库中:https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/storage/cloud-client

【讨论】:

写是什么意思? 基于此链接cloud.google.com/appengine/docs/standard/python/…(据我了解)这将允许您在存储桶中创建文件,而不是上传 通过指定文件内容创建文件与上传新文件的操作相同。这里只是叫了一个不同的名字。 我的错,我虽然在上传中创建了一个文件然后上传,但在另一个我虽然你实际上直接在存储桶文件夹中创建了文件,因此从来没有在你的服务器中,我有appengine 不允许我创建文件的问题,所以我正在尝试找到该解决方案【参考方案2】:
from googleapiclient import discovery

from oauth2client.client import GoogleCredentials

credentials = GoogleCredentials.get_application_default()

service = discovery.build('storage', 'v1', credentials=credentials)

filename = 'file.csv'

bucket = 'Your bucket name here'         

body = 'name': 'file.csv'

req = service.objects().insert(bucket=bucket, body=body, media_body=filename)

resp = req.execute()

【讨论】:

看起来像是上传而不是写入? @Manza 不一样?【参考方案3】:
from google.cloud import storage
def WriteToCloud ( buffer ):
    client = storage.Client()
    bucket = client.get_bucket( 'bucket123456789' )
    blob = bucket.blob( 'PIM.txt' )
    blob.upload_from_file( buffer )

虽然 Brandon 的回答确实将文件发送到 Google 云,但它通过上传文件而不是写入文件来做到这一点。这意味着在您将文件上传到云之前,该文件需要存在于您的磁盘上。我提出的解决方案使用“内存中”有效负载(“缓冲区”参数),然后将其写入云。要编写内容,您需要使用“upload_from_file”而不是“upload_from_filename”,其他一切都相同。

【讨论】:

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。您可以在帮助中心找到更多关于如何写好答案的信息:***.com/help/how-to-answer。祝你好运?【参考方案4】:

在较早的答案中,我仍然怀念最简单的方法,使用 open() 方法

您可以按如下方式使用 blob.open():


from google.cloud import storage
    
def write_file():
    client = storage.Client()
        bucket = client.get_bucket('bucket-name')
        blob = bucket.blob('path/to/new-blob-name.txt') 
        ## Use bucket.get_blob('path/to/existing-blob-name.txt') to write to existing blobs
        with blob.open(mode='w') as f:
            for line in object: 
                f.write(line)

您可以在此处找到更多示例和 sn-ps: https://github.com/googleapis/python-storage/tree/main/samples/snippets

【讨论】:

【参考方案5】:

我一直在寻找相同的答案,终于找到了。当我们想要从字符串到 GCS 存储桶的解决方案时,只需在最后一行更改:

from google.cloud import storage
def WriteToCloud ( your_string_name ):
    client = storage.Client()
    bucket = client.get_bucket( 'bucket123456789' )
    blob = bucket.blob( 'PIM.txt' )
    blob.upload_from_string( your_string_name )

【讨论】:

以上是关于使用python将数据写入谷歌云存储的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 python 将 JSON 文件从谷歌云存储加载到 bigquery

如何从应用引擎将写入附加到谷歌云存储文件?

使用 python 将历史数据从谷歌云存储移动到日期分区的 bigquery 表

谷歌云平台到 S3/Redshift

从 Cloud Function (python) 写入 Google Cloud Storage

谷歌云存储/大查询成本估算