如何用Python下载Blob容器所有文件或读取为DataFrame?
Azure Blob 下载与转为DataFrame实现方案
一、修正现有Blob列表代码
你的现有代码存在blob_name未定义就调用的小问题,先修正为可正常运行的版本:
from azure.storage.blob import ContainerClient import io import pandas as pd sas_url = r'https://ubftp.blob.core.windows.netxxxxxxxxxxxxxxxx' container = ContainerClient.from_container_url(sas_url, delimiter='/') blob_list = container.list_blobs() for blob in blob_list: blob_name = blob['name'] print(f"当前处理Blob: {blob_name}")
二、添加Blob下载到本地的代码
在循环中加入下载逻辑,指定本地保存路径即可实现批量下载:
from azure.storage.blob import ContainerClient import os import pandas as pd sas_url = r'https://ubftp.blob.core.windows.netxxxxxxxxxxxxxxxx' container = ContainerClient.from_container_url(sas_url, delimiter='/') blob_list = container.list_blobs() # 本地保存根目录,可自行修改 local_root_path = "./downloaded_blobs/" # 自动创建保存目录(如果不存在) os.makedirs(local_root_path, exist_ok=True) for blob in blob_list: blob_name = blob['name'] print(f"正在下载: {blob_name}") # 拼接本地保存路径,保留原Blob的层级结构 local_file_path = os.path.join(local_root_path, blob_name) # 自动创建Blob对应的子目录 os.makedirs(os.path.dirname(local_file_path), exist_ok=True) # 下载Blob到本地文件 container.download_blob(blob_name).read_to_path(local_file_path) print(f"下载完成: {local_file_path}")
三、读取Blob内容转为Pandas DataFrame
如果你的Blob是CSV格式,可直接将内容读取到内存并转为DataFrame;其他格式可替换对应读取方法:
from azure.storage.blob import ContainerClient import io import pandas as pd sas_url = r'https://ubftp.blob.core.windows.netxxxxxxxxxxxxxxxx' container = ContainerClient.from_container_url(sas_url, delimiter='/') blob_list = container.list_blobs() for blob in blob_list: blob_name = blob['name'] # 仅处理CSV文件,可根据实际格式修改后缀判断 if not blob_name.endswith('.csv'): print(f"跳过非CSV文件: {blob_name}") continue print(f"正在读取并转换: {blob_name}") # 将Blob内容读取到内存字节流 blob_bytes = container.download_blob(blob_name).readall() # 转为字符串流后读取为DataFrame df = pd.read_csv(io.StringIO(blob_bytes.decode('utf-8'))) # 这里可以添加对DataFrame的后续处理逻辑 print(f"DataFrame基本信息:") df.info() # 示例:打印前5行数据 print(df.head())
如果Blob是Parquet格式,可将pd.read_csv替换为pd.read_parquet,并使用io.BytesIO(blob_bytes)作为参数
内容的提问来源于stack exchange,提问作者Dennis Schlein
相关产品推荐
相关产品推荐

