[英]Azure Blob - Read using Python
有人能告訴我是否可以直接從 Azure blob 存儲中讀取 csv 文件作為流並使用 Python 對其進行處理嗎? 我知道它可以使用 C#.Net(如下所示)來完成,但想知道 Python 中的等效庫來執行此操作。
CloudBlobClient client = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("outfiles");
CloudBlob blob = container.GetBlobReference("Test.csv");*
是的,當然可以這樣做。 查看Azure Storage SDK for Python
from azure.storage.blob import BlockBlobService
block_blob_service = BlockBlobService(account_name='myaccount', account_key='mykey')
block_blob_service.get_blob_to_path('mycontainer', 'myblockblob', 'out-sunset.png')
您可以在此處閱讀完整的 SDK 文檔: http : //azure-storage.readthedocs.io 。
以下是使用新版 SDK (12.0.0) 執行此操作的方法:
from azure.storage.blob import BlobClient
blob = BlobClient(account_url="https://<account_name>.blob.core.windows.net"
container_name="<container_name>",
blob_name="<blob_name>",
credential="<account_key>")
with open("example.csv", "wb") as f:
data = blob.download_blob()
data.readinto(f)
有關詳細信息,請參見此處。
在此處提供您的 Azure 訂閱 Azure 存儲名稱和密鑰作為帳戶密鑰
block_blob_service = BlockBlobService(account_name='$$$$$$', account_key='$$$$$$')
這仍然得到 blob 並在當前位置保存為“output.jpg”
block_blob_service.get_blob_to_path('you-container_name', 'your-blob', 'output.jpg')
這將從 blob 獲取文本/項目
blob_item= block_blob_service.get_blob_to_bytes('your-container-name','blob-name')
blob_item.content
可以像這樣使用 python 從 blob 中流式傳輸:
from tempfile import NamedTemporaryFile
from azure.storage.blob.blockblobservice import BlockBlobService
entry_path = conf['entry_path']
container_name = conf['container_name']
blob_service = BlockBlobService(
account_name=conf['account_name'],
account_key=conf['account_key'])
def get_file(filename):
local_file = NamedTemporaryFile()
blob_service.get_blob_to_stream(container_name, filename, stream=local_file,
max_connections=2)
local_file.seek(0)
return local_file
我建議使用smart_open 。
from smart_open import open
# stream from Azure Blob Storage
with open('azure://my_container/my_file.txt') as fin:
for line in fin:
print(line)
# stream content *into* Azure Blob Storage (write mode):
with open('azure://my_container/my_file.txt', 'wb') as fout:
fout.write(b'hello world')
這是使用 Blob 中的 Pandas 讀取 CSV 的簡單方法:
service_client = BlobServiceClient.from_connection_string(os.environ['AZURE_STORAGE_CONNECTION_STRING'])
client = service_client.get_container_client("your_container")
bc = client.get_blob_client(blob="your_folder/yourfile.csv")
with open("yourfile.csv", 'wb') as file:
data = bc.download_blob()
file.write(data.readall())
volantino_df = pd.read_csv("yourfile.csv")
我知道這是一個舊帖子,但如果有人想這樣做。 我能夠按照以下代碼訪問
注意:您需要設置可以從 Azure 門戶獲取的 AZURE_STORAGE_CONNECTION_STRING -> 轉到您的存儲 -> 設置 -> 訪問密鑰,然后您將在那里獲得連接字符串。
對於 Windows:setx AZURE_STORAGE_CONNECTION_STRING ""
對於 Linux:導出 AZURE_STORAGE_CONNECTION_STRING=""
對於 macOS:導出 AZURE_STORAGE_CONNECTION_STRING=""
import os
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient, __version__
connect_str = os.getenv('AZURE_STORAGE_CONNECTION_STRING')
print(connect_str)
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
container_client = blob_service_client.get_container_client("Your Storage Name Here")
try:
print("\nListing blobs...")
# List the blobs in the container
blob_list = container_client.list_blobs()
for blob in blob_list:
print("\t" + blob.name)
except Exception as ex:
print('Exception:')
print(ex)
由於我無法在此線程上找到所需的內容,因此我想跟進 @SebastianDziadzio 的回答以檢索數據而不將其作為本地文件下載,這是我試圖為自己找到的。
將with
語句替換為以下內容:
from io import BytesIO
import pandas as pd
with BytesIO() as input_blob:
blob_client_instance.download_blob().download_to_stream(input_blob)
input_blob.seek(0)
df = pd.read_csv(input_blob, compression='infer', index_col=0)
我為此付出了很多努力我不希望任何人做同樣的事情,如果您使用的是 openpyxl 並且想直接從 azure 函數寫入 blob 存儲,請執行以下步驟,您將實現您想要的。
謝謝。 如果您需要任何幫助,請聯系 HMU。
blob = BlobClient.from_connection_string(conn_str=conString, container_name=container_name, blob_name=r'YOUR_PATH/test1.xlsx') blob.upload_blob(save_virtual_workbook(wb))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.