【问题标题】:How to get a List of Files in IBM COS Bucket using Watson Studio如何使用 Watson Studio 获取 IBM COS Bucket 中的文件列表
【发布时间】:2019-06-09 23:27:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: python ibm-cloud watson-studio


    【解决方案1】:

    Watson Studio 云提供了一个名为 project-lib 的帮助程序库,用于处理 Cloud Object Storage 实例中的对象。看看这个在 Python 中使用这个包的文档:https://dataplatform.cloud.ibm.com/docs/content/analyze-data/project-lib-python.html

    对于您的具体问题,get_files() 应该满足您的需求。这将返回存储桶中所有文件的列表,然后您可以进行模式匹配以仅保留您需要的内容。然后,基于此过滤列表,您可以迭代并为列表中的每个 file_name 使用 get_file(file_name)

    要在您的存储桶中创建“文件夹”,您需要遵循文件的命名约定来创建“伪文件夹”。例如,如果要创建资产的“数据”文件夹,则应为属于该文件夹的对象的文件名添加前缀data/

    【讨论】:

    • 谢谢格雷格。这正是我所需要的。
    【解决方案2】:

    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)
    

    【讨论】:

    • 因为这是关于 COS 和 Watson Studio 项目的,所以预装来自ibm-cos-sdkibm_boto3 会更合适。
    【解决方案3】:

    可能有一种更 Pythonic 的方式来编写它,但这里是我使用 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.")
    

    【讨论】:

      猜你喜欢
      • 2019-12-13
      • 2021-02-07
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多