0

Как проверить, существует ли файл в Google Cloud Storage?

14

У меня есть скрипт, в котором я хочу проверить, существует ли файл в бакете, и если нет, то создать его. Я пытался использовать функцию os.path.exists(file_path), где file_path = "/gs/testbucket", но получил ошибку "файл не найден".

Я знаю, что могу использовать функцию API files.listdir(), чтобы получить список всех файлов в указанном пути и затем проверить, есть ли нужный мне файл в этом списке. Но мне интересно, есть ли другой способ проверить существование файла.

5 ответ(ов)

0

Если вы работаете с файлами в 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, так как последняя функция устарела.

0

Это так же просто, как использовать метод 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 в противном случае.

0

Ответ, предоставленный @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) в зависимости от того, существует ли файл в корзине хранилища.

(У меня недостаточно репутации, чтобы оставить комментарий, но я хотел сэкономить время другим людям, так как сам потратил слишком много времени на это).

0

Если вы ищете решение на 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

0

Вы можете использовать функцию 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, если он не найден.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь