2012-11-23 69 views
3

我有一個腳本,我想檢查一個文件是否存在於一個存儲桶中,如果它不存在,那麼就創建一個文件。Python GAE - 如何檢查Google雲存儲中是否存在文件

我試過使用os.path.exists(file_path)其中file_path = "/gs/testbucket"。但我得到一個文件未找到錯誤。

我知道我可以使用files.listdir() API函數列出位於路徑上的所有文件,然後檢查我想要的文件是否是其中之一。但我想知道是否有另一種方法來檢查文件是否存在。

+0

+1自己碰到了這個。我們最終在文件的公共地址上做了HTTP HEAD,但這不是一個通用的解決方案。 – ckhan

回答

0

我想沒有函數直接檢查文件是否存在給定路徑。
我創建了一個函數,它使用API​​函數files.listdir()列出存儲桶中的所有文件,並將其與我們想要的文件名進行匹配。如果找到則返回true,否則返回false。

3

可以使用自定義功能(如下圖所示),以檢查文件是否存在或不

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 
使用上述功能在以下方式
filepath = '/gs/test/testme.txt' 
fileavability = is_file_available(filepath) 

注:在上面的函數,你可能會得到同樣結果爲「否「讀取權限時未向試圖讀取文件的應用程序發送。

1

幾年前Amit的答案略有差異,針對cloudstorage api進行了更新。

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

您可以使用stat函數來獲取文件信息。這在實踐中會對谷歌雲存儲做一個HEAD請求,而不是GET,這是一個少量的資源密集型。

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 
相關問題