Как проверить, существует ли файл в Google Cloud Storage?
У меня есть скрипт, в котором я хочу проверить, существует ли файл в бакете, и если нет, то создать его. Я пытался использовать функцию os.path.exists(file_path)
, где file_path = "/gs/testbucket"
, но получил ошибку "файл не найден".
Я знаю, что могу использовать функцию API files.listdir()
, чтобы получить список всех файлов в указанном пути и затем проверить, есть ли нужный мне файл в этом списке. Но мне интересно, есть ли другой способ проверить существование файла.
5 ответ(ов)
Если вы работаете с файлами в Google Cloud Storage (GCS) на платформе типа "Google AI Platform", вы можете использовать TensorFlow, чтобы проверить, существует ли файл или нет. Для этого можно использовать следующий код:
import tensorflow as tf
file_exists = tf.io.gfile.exists('gs://your-bucket-name/your-file.txt')
Обратите внимание, что в более новых версиях TensorFlow рекомендуется использовать tf.io.gfile.exists
вместо tf.gfile.Exists
, так как последняя функция устарела.
Это так же просто, как использовать метод exists
в объекте blob:
from google.cloud import storage
def blob_exists(projectname, credentials, bucket_name, filename):
client = storage.Client(projectname, credentials=credentials)
bucket = client.get_bucket(bucket_name)
blob = bucket.blob(filename)
return blob.exists()
В этом примере мы создаем клиента для доступа к Google Cloud Storage, получаем нужный бакет и создаем объект blob с указанным именем файла. Затем мы просто вызываем метод exists()
, который вернет True
, если объект существует в бакете, и False
в противном случае.
Ответ, предоставленный @nickthefreak, верен, как и комментарий Om Prakash. Также стоит отметить, что имя корзины (bucket_name) не должно включать gs://
в начале и не должно заканчиваться /
.
Поддерживая пример @nickthefreak и комментарий Om Prakash:
from google.cloud import storage
name = 'folder1/another_folder/file_i_want_to_check.txt'
storage_client = storage.Client()
bucket_name = 'my_bucket_name' # Не указывайте 'gs://my_bucket_name'
bucket = storage_client.bucket(bucket_name)
stats = storage.Blob(bucket=bucket, name=name).exists(storage_client)
Переменная stats
будет иметь значение типа Boolean (True или False) в зависимости от того, существует ли файл в корзине хранилища.
(У меня недостаточно репутации, чтобы оставить комментарий, но я хотел сэкономить время другим людям, так как сам потратил слишком много времени на это).
Если вы ищете решение на NodeJS, вот пример, который может вам помочь:
var storage = require('@google-cloud/storage')();
var myBucket = storage.bucket('my-bucket');
var file = myBucket.file('my-file');
file.exists(function(err, exists) {});
// Если коллбек не указан, эта функция вернёт Promise.
file.exists().then(function(data) {
var exists = data[0];
});
Если вам нужна дополнительная помощь, вы можете обратиться к этой документации:
Документация по методу exists
Вы можете использовать функцию stat
для получения информации о файле. На практике это будет выполнять запрос HEAD к Google Cloud Storage вместо GET, что менее ресурсоемко.
import cloudstorage as gcs
# Возвращает информацию о файле, если она доступна, иначе None или False.
# Запись статистики должна быть правдоподобной.
def is_file_available(filepath):
try:
return gcs.stat(filepath)
except gcs_errors.NotFoundError as e:
return False
Таким образом, функция is_file_available
возвращает информацию о файле, если файл существует, и False
, если он не найден.
Как изменить порядок столбцов в DataFrame?
'pip' не распознан как командa внутреннего или внешнего формата
Почему statistics.mean() работает так медленно?
Преобразование строки даты JSON в datetime в Python
Есть ли разница между поднятием экземпляра класса Exception и самого класса Exception?