赞
踩
背景: 项目中一个API 中的excel 加密了,需要完成以下任务:
任务一: 将这个excel 文件从API 获取,解密后将数据load 进SQL SERVER 数据库
任务二:将这个excel 文件从API 获取后,解密后将数据excel 数据load 到 Azure blob 中存储起来
对于第一个任务,先不提供方案,今天就第二个任务提供如下方案:
- import os
- from io import BytesIO
- import pandas as pd
- from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient
-
- # 假设`bytes_data`是您解密后从API获得的Excel数据的BytesIO对象
- # bytes_data = ...
-
- # 将BytesIO对象转化为DataFrame
- with BytesIO() as bio:
- # 加载到Pandas DataFrame中
- bio.write(bytes_data.getvalue())
- bio.seek(0) # 移动到文件的开头
- df = pd.read_excel(bio)
-
- # 将DataFrame转换回Excel文件保存在BytesIO对象中
- with BytesIO() as bio:
- # 将DataFrame保存到Excel文件格式的BytesIO对象中
- with pd.ExcelWriter(bio, engine='openpyxl') as writer:
- df.to_excel(writer)
-
- # 准备将Excel文件上传到Azure Blob Storage
- bio.seek(0)
- excel_data = bio.read()
-
- # 初始化Azure Blob Service Client
- # 假设你已经有了AZURE_STORAGE_CONNECTION_STRING
- connection_str = os.getenv('AZURE_STORAGE_CONNECTION_STRING')
- blob_service_client = BlobServiceClient.from_connection_string(connection_str)
-
- # 创建Blob客户端来上传文件
- # 需要Blob容器名称和文件路径在Blob中的名称
- container_name = 'your_container_name'
- blob_name = 'your_blob_name.xlsx'
- blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
-
- # 上传BytesIO对象中的数据到Azure Blob
- blob_client.upload_blob(excel_data, blob_type="BlockBlob", overwrite=True)
-
- print(f'{blob_name} uploaded to {container_name}')
-
- # 注意: 以上代码中的`your_container_name`和`your_blob_name.xlsx`要替换成你的Azure存储账户的实际容器名称和Blob名称。
- # 另外,确保你有适当的权限和正确的连接字符串
Note: 在上传到Azure Blob之前,你需要确保你有一个有效的Azure存储账户,并创建了一个容器。同时,你需要将AZURE_STORAGE_CONNECTION_STRING
设置为环境变量或以其他方式提供给你的脚本,这样才能认证你的身份并连接到Azure Blob Storage。
在这个过程中,自己走了很多弯路
弯路1,使用XlsxWriter ,走到这里,不知道该如何跟Blob 的 upload_bload 方法结合使用,
- import xlsxwriter
-
- bio = io.BytesIO()
-
- workbook = xlsxwriter.Workbook(bio)
- worksheet = workbook.add_worksheet()
弯路2,upload_blob 的使用还是一知半解,不知如何变通,后续需要继续研究 upload_blob
blob 中的upload_blob 的官方文档:使用 Python 上传 blob - Azure Storage | Microsoft Learn
1.通过本地文件路径上传块 Blob
2.通过流式传输上传块 Blob
3.将二进制数据上传到块 Blob
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。