簡體   English   中英

從“輸入”blob 存儲容器中讀取 excel 文件,並使用 python 導出到“輸出”容器中的 csv

[英]Reading excel files from "input" blob storage container and exporting to csv in "output" container with python

我正在嘗試在 python 中開發一個腳本,以從名為“源”的 blob 存儲容器中讀取.xlsx中的文件,將其轉換為.csv並將其存儲在一個新容器中(如果工作,我正在本地測試腳本我應該將它包含在 ADF 管道中)。 到目前為止,我設法訪問了 blob 存儲,但在讀取文件內容時遇到了問題。

from azure.storage.blob import BlobServiceClient, ContainerClient, BlobClient
import pandas as pd

conn_str = "DefaultEndpointsProtocol=https;AccountName=XXXXXX;AccountKey=XXXXXX;EndpointSuffix=core.windows.net"
container = "source"
blob_name = "prova.xlsx"

container_client = ContainerClient.from_connection_string(
    conn_str=conn_str, 
    container_name=container
    )
# Download blob as StorageStreamDownloader object (stored in memory)
downloaded_blob = container_client.download_blob(blob_name)

df = pd.read_excel(downloaded_blob)

print(df)

我收到以下錯誤:

ValueError:無效的文件路徑或緩沖區 object 類型:<class 'azure.storage.blob._download.StorageStreamDownloader'>

我嘗試使用.csv文件作為輸入並編寫如下解析代碼:

df = pd.read_csv(StringIO(downloaded_blob.content_as_text()) )

它有效。

關於如何修改代碼以使 excel 文件變得可讀的任何建議?

我將解決方案總結如下。

當我們在 sdk pandas中使用pd.read_excel()方法時,我們需要提供字節作為輸入。 但是當我們使用download_blob從 azure blob 下載 excel 文件時,我們只得到azure.storage.blob.StorageStreamDownloader 所以我們需要使用方法readall()content_as_bytes()將其轉換為字節。 更多詳細信息,請參閱文檔文檔

改變

df = pd.read_excel(downloaded_blob)

df = pd.read_excel(downloaded_blob.content_as_bytes())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM