Список объектов в GCS также перечисляет каталог - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь распечатать список объектов (файлов) из моего Google Bucket, но результаты также содержат подкаталог; Темп /. Как мне это опустить? Документ Google API не указывает, что это должно происходить.

Мое ведро:

gs://my_bucket/temp

Мой код:

from google.cloud import storage

storage_client = storage.Client()
bucket = storage_client.get_bucket(my_bucket)
blobs = bucket.list_blobs(prefix="temp/", delimiter='/')

for blob in blobs:
    print(blob.name)

Результаты:

temp/
temp/2019-02-01_file1.csv
temp/2019-02-01_file2.csv
temp/2019-02-01_file3.csv
temp/2019-02-01_file4.csv

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Я думаю, что этот подход вам нужен:

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

Вот ваш код с некоторыми незначительными изменениями, которые я предоставил.Кроме того, в случае, если вы не хотите, чтобы "temp /" показывался при перечислении их, я использовал метод "replace", аналогичный ответу Рассела Х.

from google.cloud import storage

my_prefix = "temp/"
my_bucket = "my_bucket_name"
storage_client = storage.Client()
bucket = storage_client.get_bucket(my_bucket)
blobs = bucket.list_blobs(prefix = my_prefix, delimiter = '/')

for blob in blobs:
    if(blob.name != my_prefix): # ignoring the subfolder itself 
        print(" Displaying " + blob.name.replace(my_prefix, "")) # if you only want to display the name of the blob
0 голосов
/ 17 мая 2019

Вы можете попробовать эту команду ниже: Я только что отредактировал пример скрипта из документации GCS

import argparse
import datetime
import pprint

# [START storage_upload_file]
from google.cloud import storage

def list_blobs_with_prefix(bucket_name, prefix, delimiter=None):
   """Lists all the blobs in the bucket that begin with the prefix.
   This can be used to list all blobs in a "folder", e.g. "public/".
   The delimiter argument can be used to restrict the results to only the
   "files" in the given "folder". Without the delimiter, the entire tree under
   the prefix is returned. For example, given these blobs:
       /a/1.txt
       /a/b/2.txt
   If you just specify prefix = '/a', you'll get back:
       /a/1.txt
       /a/b/2.txt
   However, if you specify prefix='/a' and delimiter='/', you'll get back:
       /a/1.txt
   """
   storage_client = storage.Client()
   bucket = storage_client.get_bucket(bucket_name)

   blobs = bucket.list_blobs(prefix=prefix, delimiter=delimiter)

   print('Blobs:')
   for blob in blobs:
       print(blob.name.replace(prefix, ""))

   if delimiter:
       print('Prefixes:')
       for prefix in blobs.prefixes:
           print(prefix)

if __name__ == '__main__':
   list_blobs_with_prefix('[your bucket name]', [prefix]')
...