如何使用 Watson Studio 获取 IBM COS Bucket 中的文件列表
How to get a List of Files in IBM COS Bucket using Watson Studio
我有一个有效的 Python 脚本,用于合并我想移动到 Watson Studio 项目的多个 xlsx 文件。我当前的代码使用传递给 glob 的路径变量...
path = '/Users/Me/My_Path/*.xlsx'
files = glob.glob(path)
由于 Watson Studio 中的凭据特定于单个文件,我如何获取我的 IBM COS 存储桶中所有文件的列表?我也想知道如何创建文件夹来分隔存储桶中的文件?
IBM Cloud Object Storage (COS) 中的凭证处于 COS 实例级别,而不是单个文件级别。每个 COS 实例可以有任意数量的存储桶,每个存储桶包含文件。
您可以从 Bluemix 控制台获取 COS 实例的凭证。
您可以使用 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)
Watson Studio 云提供了一个名为 project-lib 的帮助程序库,用于处理 Cloud Object Storage 实例中的对象。查看此文档以了解如何使用 Python 中的包:https://dataplatform.cloud.ibm.com/docs/content/analyze-data/project-lib-python.html
对于您的具体问题,get_files()
应该可以解决您的问题。这将 return 存储桶中所有文件的列表,然后您可以进行模式匹配以仅保留您需要的文件。基于这个过滤后的列表,您可以对列表中的每个 file_name
进行迭代和使用 get_file(file_name)
。
要在您的存储桶中创建 "folder",您需要遵循文件命名约定来创建 "pseudo folder"。例如,如果您想创建一个 "data" 资产文件夹,您应该为属于该文件夹的对象的文件名添加前缀 data/
。
可能有更 pythonic 的方式来写这个,但这是我根据@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.")
我有一个有效的 Python 脚本,用于合并我想移动到 Watson Studio 项目的多个 xlsx 文件。我当前的代码使用传递给 glob 的路径变量...
path = '/Users/Me/My_Path/*.xlsx'
files = glob.glob(path)
由于 Watson Studio 中的凭据特定于单个文件,我如何获取我的 IBM COS 存储桶中所有文件的列表?我也想知道如何创建文件夹来分隔存储桶中的文件?
IBM Cloud Object Storage (COS) 中的凭证处于 COS 实例级别,而不是单个文件级别。每个 COS 实例可以有任意数量的存储桶,每个存储桶包含文件。 您可以从 Bluemix 控制台获取 COS 实例的凭证。
您可以使用 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)
Watson Studio 云提供了一个名为 project-lib 的帮助程序库,用于处理 Cloud Object Storage 实例中的对象。查看此文档以了解如何使用 Python 中的包:https://dataplatform.cloud.ibm.com/docs/content/analyze-data/project-lib-python.html
对于您的具体问题,get_files()
应该可以解决您的问题。这将 return 存储桶中所有文件的列表,然后您可以进行模式匹配以仅保留您需要的文件。基于这个过滤后的列表,您可以对列表中的每个 file_name
进行迭代和使用 get_file(file_name)
。
要在您的存储桶中创建 "folder",您需要遵循文件命名约定来创建 "pseudo folder"。例如,如果您想创建一个 "data" 资产文件夹,您应该为属于该文件夹的对象的文件名添加前缀 data/
。
可能有更 pythonic 的方式来写这个,但这是我根据@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.")