python - 如何使用 PowerShell 或 python 脚本读取、编辑或附加存储在 Azure Blob 存储中的 Excel 文件(列和行)
问题描述
我想编写一个 Azure Runbook(Powershell, Python),它将读取 Azure 存储帐户中已经存在的 Excel 文件,并附加那里的数据并将文件保存回存储帐户。
解决方案
我们可以通过使用 blob_service_client 获取 blob 并将数据存储到变量中来实现这一点,如下所示:
blob_client = blob_service_client.get_blob_client(container="newcontainer0805", blob="source.txt")
#SOURCE CONTENTS
content = blob_client.download_blob().content_as_text
稍后我们可以以列的形式添加一些数据并附加它:
#INITIALIZE OUTPUT
output_str = ""
#STORE COULMN HEADERS
data= list()
data.append(list(["column1", "column2", "column3", "column4"]))
下面是完整的代码,我们可以在其中获取 blob 的数据并向其中添加一些内容并将其保存在同一存储帐户中的其他容器 blob 中
import logging
import sys
import os
import azure.functions as func
from azure.storage import blob
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient, __version__
def main(myblob: func.InputStream):
try:
logging.info(f"Python blob trigger function processed blob \n")
CONN_STR = "ADD_CON_STR"
blob_service_client = BlobServiceClient.from_connection_string(CONN_STR)
# MAP SOURCE FILE
blob_client = blob_service_client.get_blob_client(container="newcontainer0805", blob="source.txt")
#SOURCE CONTENTS
content = blob_client.download_blob().content_as_text
# WRITE HEADER TO A OUT PUTFILE
output_file_dest = blob_service_client.get_blob_client(container="target", blob="target.csv")
#INITIALIZE OUTPUT
output_str = ""
#STORE COULMN HEADERS
data= list()
data.append(list(["column1", "column2", "column3", "column4"]))
output_str += ('"' + '","'.join(data[0]) + '"\n')
output_file_dest.upload_blob(output_str,overwrite=True)
logging.info(' END OF FILE UPLOAD')
except Exception as e:
template = "An exception of type {0} occurred. Arguments:\n{1!r}"
message = template.format(type(e).__name__, e.args)
print (message)
if __name__ == "__main__":
main("source.txt")
我们可以根据添加内容的需求修改上面的代码。
推荐阅读
- bash - 修改正在运行的 Bash 脚本中的变量
- azure - 调用受 Azure 应用保护的 WEB API 端点方法时访问令牌返回访问被拒绝
- postgresql-9.6 - pg_ctl -m 立即丢失数据
- python - 使用 Python 将 InfluxDB 结果集设置为 Pandas Dataframe
- ruby-on-rails-5 - Rails searchkick 无法根据 where 查询获得结果
- c# - 用于创建用户的参数化查询引发缺少用户或角色名称异常
- wso2esb - WSO2 esb 验证中介失败
- javascript - 通过单击动态生成的链接打开leanmodal弹出窗口
- android - Android ClassNotFoundException android.support.v4.util.ArrayMap
- django - 如何检索当前 Django 用户并将其输入数据库条目