使用python从谷歌云存储桶中删除数据时出错
Posted
技术标签:
【中文标题】使用python从谷歌云存储桶中删除数据时出错【英文标题】:Error while deleing data from google cloud bucket using 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()
如何解决?
【问题讨论】:
【参考方案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')))
【讨论】:
以上是关于使用python从谷歌云存储桶中删除数据时出错的主要内容,如果未能解决你的问题,请参考以下文章
从 Google 存储桶 IAM 政策中删除用户(身份)不起作用
使用 python 将历史数据从谷歌云存储移动到日期分区的 bigquery 表