【问题标题】:Read csv from Azure blob Storage and store in a DataFrame从 Azure blob Storage 读取 csv 并使用 python 存储在数据框中
【发布时间】:2020-10-21 13:21:02
【问题描述】:

我正在尝试使用 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 文件存储在 pandas 数据框中的正确方法是什么。

我尝试使用:

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

但这显示了一个错误。

知道我该怎么做吗?

谢谢

【问题讨论】:

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


    【解决方案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))
    

    【讨论】:

      【解决方案2】:
      import pandas as pd
      data = pd.read_csv('blob_sas_url')
      

      可以通过右键单击要导入的 Azure 门户的 Blob 文件并选择“生成 SAS”来找到 Blob SAS 网址。然后,单击 Generate SAS token and URL 按钮并将 SAS url 复制到上面的代码中代替 blob_sas_url。

      【讨论】:

        猜你喜欢
        • 2021-02-22
        • 2020-12-28
        • 1970-01-01
        • 2020-02-23
        • 1970-01-01
        • 2018-11-04
        • 2019-08-06
        • 2022-11-02
        • 2020-03-12
        相关资源
        最近更新 更多