从Azure blob存储读取csv并使用python存储在数据框中

时间:2020-07-01 06:37:26

标签: python python-3.x pandas azure-storage-blobs azure-blob-storage

我正在尝试使用python从blob存储中读取多个CSV文件。

我正在使用的代码是:

blob_service_client = BlobServiceClient.from_connection_string(connection_str)
container_client = blob_service_client.get_container_client(container)
blobs_list = container_client.list_blobs(folder_root)
for blob in blobs_list:
    blob_client = blob_service_client.get_blob_client(container=container, blob="blob.name")
    stream = blob_client.download_blob().content_as_text()

我不确定在熊猫数据框中存储读取的CSV文件的正确方法是什么。

我尝试使用:

df = df.append(pd.read_csv(StringIO(stream)))

但这显示了一个错误。

任何想法我该怎么做?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以从blob存储中下载文件,然后从下载的文件中将数据读入pandas DataFrame中。

from azure.storage.blob import BlockBlobService
import pandas as pd
import tables

STORAGEACCOUNTNAME= <storage_account_name>
STORAGEACCOUNTKEY= <storage_account_key>
LOCALFILENAME= <local_file_name>
CONTAINERNAME= <container_name>
BLOBNAME= <blob_name>

#download from blob
t1=time.time()
blob_service=BlockBlobService(account_name=STORAGEACCOUNTNAME,account_key=STORAGEACCOUNTKEY)
blob_service.get_blob_to_path(CONTAINERNAME,BLOBNAME,LOCALFILENAME)
t2=time.time()
print(("It takes %s seconds to download "+blobname) % (t2 - t1))

# LOCALFILE is the file path
dataframe_blobdata = pd.read_csv(LOCALFILENAME)

有关更多详细信息,请参见here


如果您想直接进行转换,则代码会有所帮助。您需要从blob对象获取内容,并且在get_blob_to_text中不需要本地文件名。

from io import StringIO
blobstring = blob_service.get_blob_to_text(CONTAINERNAME,BLOBNAME).content
df = pd.read_csv(StringIO(blobstring))

答案 1 :(得分:0)

import pandas as pd
data = pd.read_csv('blob_sas_url')

可以通过右键单击要导入的 azure 门户的 blob 文件并选择生成 SAS 来找到 Blob SAS Url。然后,单击生成 SAS 令牌和 URL 按钮并将 SAS url 复制到上面的代码中以代替 blob_sas_url。