0
votes

Objets blob de liste Google Cloud Storage avec un nom de fichier spécifique

Avec l'aide de google.cloud.storage et list_blobs, je peux obtenir la liste des fichiers du compartiment spécifique. Mais je veux filtrer (nom * .ext) les fichiers exacts du seau. Je n'ai pas pu trouver la solution exacte.

Par exemple: buket = data, prefix_folder_name = sales, avec dans le dossier de préfixe j'ai une liste de factures avec des métadonnées. Je veux obtenir les factures spécifiques et ses métadonnées (nom * .csv & nom. *. Meta). De plus, si je boucle l'intégralité de all_blobs du dossier particulier pour obtenir les fichiers sélectionnés, alors ce sera un énorme volume de données et cela peut affecter les performances.

Ce serait bien que quelqu'un m'aide avec cette solution.

bucket = gcs_client.get_bucket(buket)
all_blobs = bucket.list_blobs(prefix=prefix_folder_name)
for blob in all_blobs: 
  print(blob.name)


0 commentaires

3 Réponses :


0
votes

Vous pouvez filtrer pour un préfixe, mais pour filtrer plus spécifiquement (par exemple, pour les objets se terminant par une extension de nom donnée), vous devez implémenter une logique de filtrage côté client. C'est ce gsutil fait gsutil lorsque vous gsutil une commande comme:

gsutil ls gs://your-bucket/abc*.txt


0 commentaires

1
votes

Il ne vous permet pas de filtrer, mais vous pouvez utiliser le paramètre de champs pour simplement renvoyer le nom des objets, limitant la quantité de données renvoyées et facilitant le filtrage.


0 commentaires

1
votes

Selon la documentation de google-cloud-storage, les blobs sont des objets qui ont un attribut de name , vous pouvez donc les filtrer par cet attribut.

from google.cloud import storage

# storage_client = gcs client
storage_client = storage.Client()

# bucket_name = "your-bucket-name"
# Note: Client.list_blobs requires at least package version 1.17.0.
blobs = storage_client.list_blobs(bucket_name)

# filter_dir = "filter-string"
[blob.name for blob in blobs if filter_dir in blob.name ]


0 commentaires