我要编写一个Python程序来检查文件是否在我的Google Cloud Storage的特定文件夹中,基本思想是获取list文件夹中所有对象的名称list,文件名,然后检查文件abc.txt是否位于文件名list。
list
abc.txt
现在的问题是,Google似乎只提供一种获取方法obj list,即uri.get_bucket(),请参见下面的代码,该代码来自https://developers.google.com/storage/docs/gspythonlibrary#listing- objects
obj
uri.get_bucket()
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),该名称应该很快。
gs//mybucket/abc/myfolder
有人可以帮忙回答吗?感谢每个答案!
更新 :以下内容适用于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/