2012-11-23 3 views
3

J'ai un script où je veux vérifier si un fichier existe dans un compartiment et s'il ne le crée pas.Python GAE - Comment vérifier si le fichier existe dans le stockage en nuage Google

J'ai essayé d'utiliser os.path.exists(file_path)file_path = "/gs/testbucket". Mais je reçois un fichier introuvable erreur.

Je sais que je peux utiliser la fonction API files.listdir() pour lister tous les fichiers situés sur un chemin et ensuite vérifier si le fichier que je veux en est un. Mais je me demandais s'il y avait un autre moyen de vérifier si le fichier existe.

+0

+1 a couru dans ce moi-même. Nous avons fini par faire un HTTP HEAD sur l'adresse publique du fichier, mais ce n'est pas une solution générale. – ckhan

Répondre

0

Je suppose qu'il n'y a pas de fonction à vérifier directement si le fichier existe compte tenu de son chemin.
J'ai créé une fonction qui utilise la fonction API files.listdir() pour lister tous les fichiers dans le compartiment et les faire correspondre avec le nom de fichier que nous voulons. Il renvoie true si trouvé et false sinon.

3

Vous pouvez utiliser la fonction personnalisée (ci-dessous) pour vérifier le fichier existe ou non

def is_file_available(filepath): 
#check if the file is available 
fileavability = 'yes'; 
try: 
    fp = files.open(filepath, 'r') 
    fp.close() 
except Exception,e: 
    fileavability = 'no' 
return fileavability 
utiliser la fonction ci-dessus comme suit
filepath = '/gs/test/testme.txt' 
fileavability = is_file_available(filepath) 

Note: en fonction ci-dessus, vous pouvez obtenir le résultat aussi ' non 'lorsque l'autorisation de lecture n'est pas donnée à l'application qui essaie de lire le fichier.

1

Légère variation par rapport à la réponse d'Amit d'il y a quelques années, mise à jour pour l'API cloudstorage.

import cloudstorage as gcs 

def GCSExists(gcs_file): 
    ''' 
    True if file exists; pass complete /bucket/file 
    ''' 
    try: 
     file = gcs.open(gcs_file,'r') 
     file.close() 
     status = True 
    except: 
     status = False 
    return status 
2

Vous pouvez utiliser la fonction stat pour obtenir des informations sur les fichiers. Dans la pratique, cela va faire une requête HEAD à google cloud storage au lieu d'un GET, ce qui est un peu moins gourmand en ressources.

import cloudstorage as gcs 
# return stat if there is one, else None or false. A stat record should be truthy 
def is_file_available(filepath): 

    try: 
    return gcs.stat(filepath) 
    except gcs_errors.NotFoundError as e: 
    return False 
Questions connexes