Google Cloud Storage + Python:如何在GCS中的某个文件夹中列出obj?

Ree*_*Xia 9 python google-cloud-storage gcloud-python google-cloud-python

我打算编写一个Python程序来检查文件是否在我的Google云端存储的某个文件夹中,基本的想法是获取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()
Run Code Online (Sandbox Code Playgroud)

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

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

Bra*_*ugh 6

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

from apiclient import discovery

# Auth goes here if necessary. Create authorized http object...
client = discovery.build('storage', 'v1beta2') # 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)
Run Code Online (Sandbox Code Playgroud)

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

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


JJ *_*wax 6

您可能还想查看gcloud-python文档.

from gcloud import storage
connection = storage.get_connection(project_name, email, private_key_path)
bucket = connection.get_bucket('my-bucket')

for key in bucket:
  if key.name == 'abc.txt':
    print 'Found it!'
    break
Run Code Online (Sandbox Code Playgroud)

但是,您可能最好只检查文件是否存在:

if 'abc.txt' in bucket:
  print 'Found it!'
Run Code Online (Sandbox Code Playgroud)


Sha*_*uly 6

这为我工作:

client = storage.Client()
BUCKET_NAME = 'DEMO_BUCKET'
bucket = client.get_bucket(BUCKET_NAME)

blobs = bucket.list_blobs()

for blob in blobs:
    print(blob.name)
Run Code Online (Sandbox Code Playgroud)

list_blobs()方法将返回用于查找存储桶中blob的迭代器。现在,您可以遍历Blob并访问存储桶中的每个对象。在此示例中,我仅打印出对象的名称。

该文档对我有很多帮助:

希望我能帮上忙!

  • 如果要过滤特定文件夹中的文件,请使用`bucket.list_blobs(prefix =“ path”)`。 (2认同)