小编典典

Google Cloud Storage + Python:是否可以在GCS的某些文件夹中列出obj?

python

我要编写一个Python程序来检查文件是否在我的Google Cloud
Storage的特定文件夹中,基本思想是获取list文件夹中所有对象的名称list,文件名,然后检查文件abc.txt是否位于文件名list

现在的问题是,Google似乎只提供一种获取方法obj
list,即uri.get_bucket(),请参见下面的代码,该代码来自https://developers.google.com/storage/docs/gspythonlibrary#listing-
objects

uri = boto.storage_uri(DOGS_BUCKET, GOOGLE_STORAGE)
for obj in uri.get_bucket():
    print '%s://%s/%s' % (uri.scheme, uri.bucket_name, obj.name)
    print '  "%s"' % obj.get_contents_as_string()

的缺点uri.get_bucket()是,它看起来像是先获取所有对象,这是我所不想要的,我只需要获取特定文件夹的obj名称list(例如gs//mybucket/abc/myfolder),该名称应该很快。

有人可以帮忙回答吗?感谢每个答案!


阅读 208

收藏
2020-12-20

共1个答案

小编典典

更新 :以下内容适用于Python的旧版“ Google API客户端库”,但如果您不使用该客户端,则更喜欢适用于Python的较新的“
Google Cloud Client Library”(https://googleapis.dev/python/ storage / latest
/
index.html)。对于较新的库,与以下代码等效:

from google.cloud import storage

client = storage.Client()
for blob in client.list_blobs('bucketname', prefix='abc/myfolder'):
  print(str(blob))

老年客户的答案如下。

您可能会发现,使用具有完整功能的Python客户端的JSON
API更容易。它具有一个列出带有前缀参数的对象的功能,您可以通过这种方式检查某个目录及其子目录:

from apiclient import discovery

# Auth goes here if necessary. Create authorized http object...
client = discovery.build('storage', 'v1') # add http=whatever param if auth
request = client.objects().list(
    bucket="mybucket",
    prefix="abc/myfolder")
while request is not None:
  response = request.execute()
  print json.dumps(response, indent=2)
  request = request.list_next(request, response)

列表调用的完整文档在这里:https//developers.google.com/storage/docs/json_api/v1/objects/list

此处记录了Google Python API客户端:https : //code.google.com/p/google-api-python-
client/

2020-12-20