我正在尝试使用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)))
但这显示了一个错误。
任何想法我该怎么做?
谢谢
答案 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。