从阿里巴巴 OSS 中读取一个对象并使用 pandas python 修改它

Posted

技术标签:

【中文标题】从阿里巴巴 OSS 中读取一个对象并使用 pandas python 修改它【英文标题】:Read an object from Alibaba OSS and modify it using pandas python 【发布时间】:2021-07-21 10:19:43 【问题描述】:

所以,我的数据是阿里云OSS Bucket中的CSV文件格式。 我目前正在执行一个 Python 脚本,其中:

    我将文件下载到本地计算机中。 在我的本地机器上使用 Python 脚本进行更改。 将其存储在 AWS 云中。

我必须修改这个方法并在阿里云中安排一个 cron 作业来自动运行这个脚本。 Python脚本会上传到阿里云的任务管理中。

所以新的步骤将是:

    将 OSS 存储桶中的文件读入 Pandas。 修改它 - 将它与其他数据合并,一些列发生变化。 - 将在 pandas 中完成。 将修改后的文件存储到 AWS RDS。

我被困在第一步本身。 错误日志:

OSS2 和 pandas 的“未找到模块”。

正确的做法是什么?

这是我的脚本的草稿(关于如何在我的本地机器上执行脚本):

import os,re
import oss2 -- **throws an error. No module found.**
import datetime as dt
import pandas as pd -- **throws an error. No module found.**
import tarfile
import mysql.connector
from datetime import datetime
from itertools import islice
dates = (dt.datetime.now()+dt.timedelta(days=-1)).strftime("%Y%m%d")
def download_file(access_key_id,access_key_secret,endpoint,bucket):

    #Authentication
    auth = oss2.Auth(access_key_id, access_key_secret)

    # Bucket name
    bucket = oss2.Bucket(auth, endpoint, bucket)

    # Download the file
    try:
        # List all objects in the fun folder and its subfolders.
        for obj in oss2.ObjectIterator(bucket, prefix=dates+'order'):
            order_file = obj.key
            objectName = order_file.split('/')[1]
            df = pd.read_csv(bucket.get_object(order_file)) # to read into pandas
            # FUNCTION to modify and upload
        print("File downloaded")
    except:
        print("Pls check!!! File not read")
    return objectName

【问题讨论】:

什么是任务管理器服务?可以分享一个链接吗? 抱歉无法分享链接。但它是仪表板下的选项之一(任务管理而不是任务管理器 - 我也在问题中进行了编辑)。其他选项有:运行报告、项目管理、任务管理、数据源管理、日志管理、执行器管理、资源监控、JSON 格式。即使我是新手,也只能访问仪表板。 【参考方案1】:
import os,re
import oss2 
import datetime as dt
import pandas as pd 
import tarfile
import mysql.connector
from datetime import datetime
from itertools import islice

import io ## include this new library 

dates = (dt.datetime.now()+dt.timedelta(days=-1)).strftime("%Y%m%d")
def download_file(access_key_id,access_key_secret,endpoint,bucket):

    #Authentication
    auth = oss2.Auth(access_key_id, access_key_secret)

    # Bucket name
    bucket = oss2.Bucket(auth, endpoint, bucket)

    # Download the file
    try:
        # List all objects in the fun folder and its subfolders.
        for obj in oss2.ObjectIterator(bucket, prefix=dates+'order'):
            order_file = obj.key
            objectName = order_file.split('/')[1]


            bucket_object = bucket.get_object(order_file).read() ## read the file from OSS 
            img_buf = io.BytesIO(bucket_object)) 

            df = pd.read_csv(img_buf) # to read into pandas
            # FUNCTION to modify and upload
        print("File downloaded")
    except:
        print("Pls check!!! File not read")
    return objectName

【讨论】:

虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。

以上是关于从阿里巴巴 OSS 中读取一个对象并使用 pandas python 修改它的主要内容,如果未能解决你的问题,请参考以下文章

阿里云对象存储OSS存储照片

阿里云对象存储OSS存储照片

使用axios上传文件到阿里云对象文件存储服务器oss

SpringBoot整合阿里云OSS

乐鑫Esp32学习之旅28 熟悉自定义分区表 partition,拉取阿里云OSS对象存储的单片机/图片等较大文件保存在特定的存储位置,并读取出来做完整性校验,保证数据的完整性。(附带源码)

乐鑫Esp32学习之旅28 熟悉自定义分区表 partition,拉取阿里云OSS对象存储的单片机/图片等较大文件保存在特定的存储位置,并读取出来做完整性校验,保证数据的完整性。(附带源码)