Как получить список файлов в IBM COS Bucket с помощью Watson Studio

У меня есть рабочий скрипт Python для объединения нескольких файлов xlsx, которые я хочу переместить в проект Watson Studio. Мой текущий код использует переменную пути, которая передается glob...

path = '/Users/Me/My_Path/*.xlsx' files = glob.glob(path)

Поскольку учетные данные в Watson Studio относятся к отдельным файлам, как мне получить список всех файлов в моем хранилище IBM COS? Мне также интересно, как создавать папки для разделения файлов в моем хранилище?

3 ответа

Решение

Облако Watson Studio предоставляет вспомогательную библиотеку с именем project-lib для работы с объектами в вашем экземпляре Cloud Object Storage. Ознакомьтесь с этой документацией по использованию пакета в Python: https://dataplatform.cloud.ibm.com/docs/content/analyze-data/project-lib-python.html

Для вашего конкретного вопроса, get_files() должен делать то, что вам нужно. Это вернет список всех файлов в вашей корзине, затем вы сможете выполнить сопоставление с образцом, чтобы оставить только то, что вам нужно. Основываясь на этом отфильтрованном списке, вы можете итерировать и использовать get_file(file_name) для каждого file_name в вашем списке.

Чтобы создать "папку" в вашем ведре, вы должны следовать соглашению об именовании файлов для создания "псевдопапки". Например, если вы хотите создать папку ресурсов "data", вам следует добавить префикс имен файлов для объектов, принадлежащих этой папке, с помощью data/,

Вероятно, есть более питонский способ написать это, но вот код, который я написал, используя project-lib, согласно ответу, предоставленному @Greg Filla

files = []  # List to hold data file names

# Get list of all file names in storage bucket
all_files = project.get_files()  # returns list of dictionaries

# Create list of file names to load based on prefix
for f in all_files:
    if f['name'][:3] == DataFile_Prefix: 
        files.append(f['name'])

print ("There are " + str(len(files)) + " data files in the storage bucket.")

Учетные данные в IBM Cloud Object Storage (COS) находятся на уровне экземпляра COS, а не на уровне отдельных файлов. Каждый экземпляр COS может иметь любое количество сегментов, в каждом из которых содержатся файлы. Вы можете получить учетные данные для экземпляра COS из консоли Bluemix.

https://console.bluemix.net/docs/services/cloud-object-storage/iam/service-credentials.html

Вы можете использовать пакет boto3 python для доступа к файлам. https://boto3.amazonaws.com/v1/documentation/api/latest/index.html

import boto3
s3c = boto3.client('s3', endpoint_url='XXXXXXXXX',aws_access_key_id='XXXXXXXXXXX',aws_secret_access_key='XXXXXXXXXX')
s3.list_objects(Bucket=bucket_name, Prefix=file_path)
s3c.download_file(Filename=filename, Bucket=bucket, Key=objectname)
s3c.upload_file(Filename=filename, Bucket=bucket, Key=objectname)
Другие вопросы по тегам