You need to enable JavaScript to run this app. 如何将数据科学项目中生成的CSV文件上传存储至Cloudinary云平台
优惠活动
大模型
产品
解决方案
定价
更多

如何将数据科学项目中生成的CSV文件上传存储至Cloudinary云平台

将CSV直接存储到Cloudinary的实现方案

前置准备

  • 安装Cloudinary官方Python SDK,执行命令 pip install cloudinary
  • 初始化Cloudinary配置,传入你的账户对应的云名称、API密钥、API密钥对;如果是Django项目,可将配置参数写入settings.py统一管理,避免硬编码

核心逻辑调整思路

原代码是先将CSV写入服务器本地磁盘再处理,可按需选择两种实现方案:

  1. 直接将DataFrame转成内存中的CSV流,无本地临时文件,节省服务器存储
  2. 保留本地CSV写入逻辑,上传后再清理临时文件

修正后完整代码示例

首先是全局导入与配置部分:

import cloudinary.uploader
import io
import pandas as pd
import json
from rest_framework.response import Response
from rest_framework.views import APIView

# 初始化Cloudinary配置,替换为你的账户参数
cloudinary.config(
  cloud_name = "你的云名称",
  api_key = "你的API密钥",
  api_secret = "你的API密钥对"
)

接口类的修改部分如下(原有爬取、数据清洗逻辑保持不变,仅调整存储相关逻辑):

class NepseApi(APIView):
    authentication_classes = []
    permission_classes = []
    def get(self, request, format=None):
        level2=[]
        rng=get_range(request, 8)
        table_Datas=get_url(request)
        level1= pd.Series(table_Datas).drop_duplicates().tolist()

        for k in level1:
            if len(k) > 35:
                level2.append(k)
            else:
                pass
        d=[]
        for l in range(1, len(level2)):
            c= level2[l].split('\n')
            d.append(c)
        df= pd.DataFrame(d[1:], columns=d[0])
        date= pd.Timestamp.today().strftime('%Y-%m-%d')
        df['date']= date

        # 修正原代码顺序:先重命名列,保证CSV与返回JSON的结构统一
        df.rename(columns={'Traded Companies': 'company_name','No. Of Transaction': 'no_of_transaction', 'Max Price':'max_price','Min Price':'min_price','Closing Price':'closing_price','Traded Shares':'traded_shares','Previous Closing':'previous_closing','Difference Rs.':'difference_rs'}, inplace=True)

        # 内存流生成CSV(无本地临时文件)
        csv_buffer = io.StringIO()
        df.to_csv(csv_buffer, index=True)
        csv_buffer.seek(0) # 重置缓冲区指针到开头,确保上传时能读取完整内容

        # 上传到Cloudinary并定义存储路径
        upload_result = cloudinary.uploader.upload(
            csv_buffer,
            # 定义Cloudinary端的存储路径与文件名
            public_id=f"nepse_daily_market_data/{date}_trading_records",
            resource_type="raw", # CSV为非媒体类原始文件,必须指定该参数,否则上传会失败
            overwrite=True # 同一天重复请求时覆盖旧文件,可根据需求关闭
        )

        # 原有返回逻辑保持不变
        jsn = json.loads(df.to_json(orient='records'))
        return Response(jsn)

关键说明

  • 存储路径构建:通过public_id参数自定义Cloudinary端的存储层级与文件名,示例中nepse_daily_market_data/是自定义的一级目录,{date}_trading_records是文件名,平台会自动为raw类型文件补充.csv后缀
  • 若选择保留本地CSV的方案:只需将原df.to_csv(date +'.csv', index=True)的本地写入逻辑保留,直接将本地文件路径f"{date}.csv"作为上传方法的第一个参数即可,上传完成后可调用os.remove()清理临时文件
  • 已修正原代码的顺序问题:原代码先生成CSV再重命名列,会导致保存的CSV使用原始列名,与接口返回的重命名后JSON结构不一致

内容的提问来源于stack exchange,提问作者user14194056

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 05:36:04