我有一個腳本,我想檢查一個文件是否存在於一個存儲桶中,如果它不存在,那麼就創建一個文件。Python GAE - 如何檢查Google雲存儲中是否存在文件
我試過使用os.path.exists(file_path)
其中file_path = "/gs/testbucket"
。但我得到一個文件未找到錯誤。
我知道我可以使用files.listdir()
API函數列出位於路徑上的所有文件,然後檢查我想要的文件是否是其中之一。但我想知道是否有另一種方法來檢查文件是否存在。
我有一個腳本,我想檢查一個文件是否存在於一個存儲桶中,如果它不存在,那麼就創建一個文件。Python GAE - 如何檢查Google雲存儲中是否存在文件
我試過使用os.path.exists(file_path)
其中file_path = "/gs/testbucket"
。但我得到一個文件未找到錯誤。
我知道我可以使用files.listdir()
API函數列出位於路徑上的所有文件,然後檢查我想要的文件是否是其中之一。但我想知道是否有另一種方法來檢查文件是否存在。
我想沒有函數直接檢查文件是否存在給定路徑。
我創建了一個函數,它使用API函數files.listdir()
列出存儲桶中的所有文件,並將其與我們想要的文件名進行匹配。如果找到則返回true,否則返回false。
可以使用自定義功能(如下圖所示),以檢查文件是否存在或不
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)
注:在上面的函數,你可能會得到同樣結果爲「否「讀取權限時未向試圖讀取文件的應用程序發送。
幾年前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
您可以使用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
+1自己碰到了這個。我們最終在文件的公共地址上做了HTTP HEAD,但這不是一個通用的解決方案。 – ckhan