如何使用python循环访问Google云端存储中子目录中的所有文件名?

som*_*ode 7 python google-cloud-storage google-cloud-platform google-cloud-datalab

假设我在Google云端存储上有一些存储桶/子目录,此存储桶的地址是:

gs://test-monkeys-example/training_data/cats
Run Code Online (Sandbox Code Playgroud)

在这个猫子目录中,我有一堆猫的图像,所有这些都是jpgs.我如何在python循环中通过cats子目录并打印出其中所有文件的名称?

就像是:

for x in directory('gs://test-monkeys-example/training_data/cats'):
    print(x)
Run Code Online (Sandbox Code Playgroud)

显然目录('gs:// test-monkeys-example/training_data/cats')不是如何做到的,只是伪问题 - 我该怎么做?!

Bra*_*ugh 12

Google云端存储仅支持列出以特定前缀开头的对象.您可以从客户端库中访问它,如下所示:

from google.cloud import storage

client = storage.Client()
bucket = client.bucket('mybucket')
for blob in bucket.list_blobs(prefix='training_data/cats'):
  print blob.name
Run Code Online (Sandbox Code Playgroud)


yel*_*yed 7

使用存储模块:

import google.datalab.storage as storage
cats = [o.key for o in storage.Bucket('test-monkeys-example').objects()
  if o.key.startswith('training_data/cats')]
Run Code Online (Sandbox Code Playgroud)

这会给你一个这样的猫的列表.

或者,您可以使用Objects该类:

cats = [o.key for o in storage.Objects('test-monkeys-example', '', '')
  if o.key.startswith('training_data/cats')]
Run Code Online (Sandbox Code Playgroud)

如果你不需要放入变量的列表,你可以使用%gcs魔法,它更容易:

%gcs list -o gs://test-monkeys-example/training_data/cats/*
Run Code Online (Sandbox Code Playgroud)

这将打印键的HTML表.请注意,这是一个完整的GCS路径,从gs://.