如何使用Watson Studio获取IBM COS Bucket中的文件列表

时间:2019-01-15 22:03:58

标签: python ibm-cloud watson-studio

我有一个有效的Python脚本,用于合并要移至Watson Studio项目的多个xlsx文件。我当前的代码使用一个传递给glob的路径变量...

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

由于Watson Studio中的凭证特定于单个文件,因此如何获得IBM COS存储桶中所有文件的列表?我还想知道如何创建文件夹以分隔存储桶中的文件?

3 个答案:

答案 0 :(得分:1)

IBM Cloud Object Storage(COS)中的凭证位于COS实例级别,而不是单个文件级别。每个COS实例可以具有任意数量的存储桶,每个存储桶都包含文件。 您可以从Bluemix控制台获取COS实例的凭证。

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

您可以使用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)

答案 1 :(得分:1)

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/前缀。

答案 2 :(得分:1)

也许有一种更Python的方式来编写此代码,但这是我根据@Greg Filla提供的答案使用 project-lib 编写的代码

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.")