1

GCS = Google Cloud Storage
GAE = Google App EngineКак рисовать в GCS при использовании клиентской библиотеки GAE Python GCS для доступа?

Если есть огромное количество файлов в заданной директории (эмулировать каталога, так как не существует никаких реальных из них), как мне удается:

  1. Список всех файлов для некоторой обработки в моем коде GAE Python?
  2. Сортировка в порядке убывания имени файла (в каталогах, где все файлы могут быть преобразованы в номера)?

listbucket() упоминает о разбиении на страницы, но не уточняет. Я не понимаю, как использовать paginate с помощью 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) 

ответ

4

cloudstorage.listbucket возвращает итератор так что вы можете «постраничной», только получив и показывая N элементов одновременно (например, с itertools.islice от стандартного Python библиотека).

Однако он дает информацию об объекте (экземпляры https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/gcsfilestat_class) строго в алфавитном порядке, и нет возможности изменить это (в частности, чтобы инвертировать порядок, как вам кажется).

Если вы должны показать объекты в некотором другом порядке, вам придется отказаться от фактической пагинации - сделать список в памяти, то сортировать его, как вы делаете сейчас (тогда вы можете настоящий что отсортированный список в «разбитом на страницы», конечно, но между тем он взял всю эту память).

Вы можете открыть запрос функции в https://code.google.com/p/googleappengine/issues/list конечно - нет в настоящее время иметь функцию ГКС разберитесь в любом случае но алфавитном порядке по возрастанию по имени объекта.

+0

Большое спасибо за пояснительный ответ. Я попробовал бы эту часть итератора, прежде чем пометить этот ответ как принятый. Как было предложено вами, я открыл [Feature Request] (https://code.google.com/p/googleappengine/issues/detail?id=11715). Цените свою помощь и время. – gsinha

Смежные вопросы