Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GAE Python GCS客户端库进行访问时,如何在GCS中分页?_Python_Google App Engine_Google Cloud Storage_Google Cloud Datastore - Fatal编程技术网

使用GAE Python 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

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

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

  • 在我的GAE Python代码中列出一些处理的所有文件
  • 按文件名降序排序(在包含所有文件的目录中 可以转换为数字吗
  • ()提到分页,但没有详细说明。我不明白如何使用()分页

    我使用()如下所示:

    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感谢您的帮助和时间。非常感谢您提供的解释性答案。在将此答案标记为已接受之前,我会尝试一下迭代器部分。根据您的建议,我已打开了一个。感谢您的帮助和时间。