GCS = Google云端存储
GAE = Google App Engine
如果给定目录中存在大量文件(模拟目录,因为不存在真实文件),我该如何管理:
listbucket()提到了分页,但没有详细说明。我不明白如何使用listbucket()进行分页。
我使用了listbucket(),如下所示:
import cloudstorage as gcs
::
bucket_name = os.environ.get ('BUCKET_NAME', app_identity.get_default_gcs_bucket_name ())
gcs_list_obj = gcs.listbucket ('/' + bucket_name + '/dir_1/dir_2/', delimiter="/")
# ITERATE THROUGH YEAR DIRECTORIES TO GET THE HIGHEST YEAR DIRECTORY NAME VALUE.
year_list = []
for item in gcs_list_obj:
# EACH "ITEM" WOULD BE A DIRECTORY REPRESENTING TIMESTAMP YEAR.
if item.is_dir:
# IT IS A DIRECTORY.
filename = item.filename
# EXTRACT YEAR FROM ABSOLUTE FILENAME.
year_name = ""
counter = len (filename) - 2 # START AT SECOND LAST CHARACTER.
while (filename[counter]!="/"):
year_name = filename[counter] + year_name
counter = counter - 1
# COLLECT ALL YEAR VALUES.
year_list.append ( int (year_name) )
# SORT THEM IN DESCENDING ORDER.
year_list = sorted (year_list, reverse=True)
答案 0 :(得分:4)
cloudstorage.listbucket
会返回迭代器,因此您可以"分页"仅通过一次获取和显示N个项目(例如,使用标准Python库中的itertools.islice
)。
然而,它严格按字母顺序产生对象信息(https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/gcsfilestat_class
的实例),并且无法改变它(特别是反转顺序,正如您所希望的那样)。
如果您必须以不同的顺序显示对象,您将不得不放弃实际的分页 - 在内存中创建一个列表然后对其进行排序,就像您现在正在做的那样(那么你可以呈现那个排序列表,当然是#34;分页"方式,但同时它占用了所有内存)。
当然可以在https://code.google.com/p/googleappengine/issues/list打开功能请求 - 目前还没有任何功能可以让GCS按照对象名称排序但按字母顺序升序排序。