使用GAE Python GCS客户端库进行访问时,如何在GCS中分页?
GCS=谷歌云存储使用GAE Python GCS客户端库进行访问时,如何在GCS中分页?,python,google-app-engine,google-cloud-storage,google-cloud-datastore,Python,Google App Engine,Google Cloud Storage,Google Cloud Datastore,GCS=谷歌云存储 GAE=谷歌应用程序引擎 如果给定目录(模拟目录,因为不存在真实目录)中有大量文件,我如何管理: 在我的GAE Python代码中列出一些处理的所有文件 按文件名降序排序(在包含所有文件的目录中 可以转换为数字吗 ()提到分页,但没有详细说明。我不明白如何使用()分页 我使用()如下所示: import cloudstorage as gcs :: bucket_name = os.environ.get ('BUCKET_NAME', app_i
GAE=谷歌应用程序引擎 如果给定目录(模拟目录,因为不存在真实目录)中有大量文件,我如何管理:
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)
cloudstorage.listbucket
返回一个迭代器,因此您可以通过一次只获取并显示N个项来“分页”(例如,使用标准Python库中的itertools.islice
)
但是,它会生成对象信息(https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/gcsfilestat_class
)严格按照字母顺序排列,并且没有办法改变这一点(特别是按照您的意愿颠倒顺序)
如果你必须以不同的顺序显示对象,你就必须放弃实际的分页——在内存中创建一个列表,然后像现在一样进行排序(当然,你可以以“分页”的方式呈现排序后的列表,但同时它占用了所有的内存)
当然,您可以随时打开一个功能请求——目前没有让GCS按对象名称按字母升序排序的功能,
cloudstorage。listbucket
返回一个迭代器,因此您可以通过一次只获取并显示N个项目来“分页”(例如,使用标准Python库中的itertools.islice
)
但是,它会生成对象信息(https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/gcsfilestat_class
)严格按照字母顺序排列,并且没有办法改变这一点(特别是按照您的意愿颠倒顺序)
如果你必须以不同的顺序显示对象,你就必须放弃实际的分页——在内存中创建一个列表,然后像现在一样进行排序(当然,你可以以“分页”的方式呈现排序后的列表,但同时它占用了所有的内存)
当然可以随时打开一个功能请求——目前没有让GCS按对象名称按字母升序排序的功能。非常感谢您的解释性回答。在将此答案标记为已接受之前,我会尝试一下迭代器部分。根据您的建议,我已打开了一个.Appr感谢您的帮助和时间。非常感谢您提供的解释性答案。在将此答案标记为已接受之前,我会尝试一下迭代器部分。根据您的建议,我已打开了一个。感谢您的帮助和时间。