【问题标题】:Error while deleing data from google cloud bucket using python使用python从谷歌云存储桶中删除数据时出错
【发布时间】:2021-09-06 03:58:58
【问题描述】:

我正在尝试从 google cloud bigquery 中删除存储桶数据:

        prefix = '122352346' + '202106'
        bucket = storage_client.get_bucket('test-bucket')
        bucket.delete_blobs(blobs=bucket.list_blobs(prefix=prefix))

存储桶存在,它也有前缀 122352346202106

在执行时,我收到以下错误:


Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/airflow/models/taskinstance.py", line 966, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/usr/local/airflow/dags/bigquery/bigquery_data.py", line 205, in execute
    bucket.delete_blobs(blobs=bucket.list_blobs(prefix=prefix)))
  File "/usr/local/lib/python3.7/site-packages/google/cloud/storage/bucket.py", line 1622, in delete_blobs
    len(blobs),
TypeError: object of type 'HTTPIterator' has no len()

如何解决?

【问题讨论】:

    标签: python-3.x google-cloud-platform


    【解决方案1】:

    您应该尝试以不同的方式使用 blob 迭代器:

        prefix = '122352346' + '202106'
        bucket = storage_client.get_bucket('test-bucket')
    
        for blob_to_delete in bucket.list_blobs(prefix=prefix):
            bucket.delete_blobs(blob_to_delete)
    

    【讨论】:

      【解决方案2】:
      delete_blobs 中的

      blob 参数查找包含要删除的 blob 名称的列表类型。

      如果您查看传递给 blobs 参数的对象的类型,它不是列表类型,而是“google.api_core.page_iterator.HTTPIterator”。

      因此,这将完成这项工作:

      bucket.delete_blobs(blobs=list(bucket.list_blobs(prefix='sample/path')))
      

      【讨论】:

        猜你喜欢
        • 2019-09-20
        • 2016-10-05
        • 2020-05-11
        • 2020-02-27
        • 1970-01-01
        • 2018-07-22
        • 1970-01-01
        • 1970-01-01
        • 2016-01-31
        相关资源
        最近更新 更多