gpt4 book ai didi

python - 使用 GAE Python GCS Client Library 访问时如何在 GCS 中分页?

转载 作者:太空宇宙 更新时间:2023-11-04 10:27:15 30 4
gpt4 key购买 nike

GCS = 谷歌云存储
GAE = 谷歌应用引擎

如果给定目录(模拟目录,因为不存在真实目录)中有大量文件,我该如何管理:

  1. 在我的 GAE Python 代码中列出用于某些处理的所有文件?
  2. 按文件名降序排列(在所有文件所在的目录中可以转换为数字 ) ?

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)

最佳答案

cloudstorage.listbucket 返回一个迭代器,因此您可以通过一次只获取和显示 N 个项目来“分页”(例如使用 itertools.islice 来自标准 Python 库)。

但是它严格按照字母顺序生成对象信息(https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/gcsfilestat_class 的实例),并且无法更改(特别是颠倒顺序,正如您所希望的那样)。

如果您必须以某种不同的顺序显示对象,您将不得不放弃实际的分页——在内存中创建一个列表然后对其进行排序,就像您现在所做的那样(然后您可以呈现当然是以“分页”方式排序的列表,但同时它占用了所有内存)。

请随时在 https://code.google.com/p/googleappengine/issues/list 上提出功能请求当然——目前还没有让 GCS 对事物进行排序的功能但是按对象名称的字母升序。

关于python - 使用 GAE Python GCS Client Library 访问时如何在 GCS 中分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28710432/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com