OCI Notebook中DataFrame生成的CSV直接上传至Bucket的问题求助
解决OCI Data Science Notebook自动上传CSV到对象存储的问题
问题根源
你遇到的ConfigFileNotFound错误,是因为官方示例代码针对本地环境编写,依赖~/.oci/config配置文件,但OCI Data Science Notebook作为托管环境,默认使用Instance Principals进行身份认证,无需手动创建本地config文件。
解决方案
以下提供两种更简洁的实现方式,适配Notebook环境:
方式1:直接从DataFrame上传(无需生成本地CSV文件)
这种方式跳过本地文件存储环节,直接将DataFrame转为CSV字节流上传,效率更高:
import pandas as pd import oci from oci.object_storage import ObjectStorageClient from oci.auth.signers import InstancePrincipalsSecurityTokenSigner # 1. 初始化对象存储客户端(使用Instance Principals认证) signer = InstancePrincipalsSecurityTokenSigner() object_storage_client = ObjectStorageClient(config={}, signer=signer) namespace = object_storage_client.get_namespace().data # 2. 假设你的DataFrame为df(替换成你的实际DataFrame) df = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['a', 'b', 'c']}) # 3. 将DataFrame转为CSV字节流 csv_content = df.to_csv(index=False).encode('utf-8') # 4. 配置上传参数(替换为你的存储桶名称和目标对象名称) bucket_name = "your-target-bucket" object_name = "data_output.csv" # 5. 执行上传 object_storage_client.put_object( namespace_name=namespace, bucket_name=bucket_name, object_name=object_name, put_object_body=csv_content ) print(f"已成功将DataFrame上传至存储桶 {bucket_name},对象名称:{object_name}")
方式2:上传已生成的本地CSV文件
如果已经生成了本地CSV文件,可使用以下代码上传:
import oci from oci.object_storage import ObjectStorageClient from oci.auth.signers import InstancePrincipalsSecurityTokenSigner # 1. 初始化对象存储客户端 signer = InstancePrincipalsSecurityTokenSigner() object_storage_client = ObjectStorageClient(config={}, signer=signer) namespace = object_storage_client.get_namespace().data # 2. 配置参数(替换为你的实际路径和存储桶信息) local_csv_path = "/home/datascience/your-file.csv" bucket_name = "your-target-bucket" object_name = "uploaded_file.csv" # 存储桶中显示的文件名 # 3. 读取文件并上传 with open(local_csv_path, "rb") as file: object_storage_client.put_object( namespace_name=namespace, bucket_name=bucket_name, object_name=object_name, put_object_body=file ) print(f"本地文件 {local_csv_path} 已成功上传至存储桶 {bucket_name}")
关键修改说明
- 替换了认证方式:用
InstancePrincipalsSecurityTokenSigner替代本地config文件,适配Notebook的托管环境身份认证机制 - 简化了流程:去掉了官方示例中的多进程、命令行参数等复杂逻辑,保留核心上传功能,更适合Notebook场景
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

