LoginSignup
0
0

More than 1 year has passed since last update.

Pythonで Azure Blob Storage からファイルをダウンロードしてみました

Posted at

概要

Azure Blob Storage にあるファイルをローカルにダウンロードするPythonプログラムです。

実行環境

macOS Monterey 12.3.1
python 3.8.12
azure cli 2.41.0

BLOB情報

ストレージアカウントの接続文字列の取得

$ az storage account show-connection-string --name [StorageAccountName] --resource-group [ResourceGroupName] -o table
ConnectionString
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=[StorageAccountName];AccountKey=[StorageAccountKey1]

今回の対象とするBLOBの取得

# BLOBのリスト
$ az storage blob list --account-name [StorageAccountName] --container-name partnercenter -o table
Name                                                                                           Blob Type    Blob Tier    Length    Content Type              Last Modified              Snapshot
---------------------------------------------------------------------------------------------  -----------  -----------  --------  ------------------------  -------------------------  ----------
billing-data                                                                                   BlockBlob    Hot                                              2022-10-24T16:06:44+00:00
billing-data/TestExport                                                                        BlockBlob    Hot                                              2022-10-24T16:06:44+00:00
billing-data/TestExport/20220901-20220915                                                      BlockBlob    Hot                                              2022-10-24T16:06:44+00:00
billing-data/TestExport/20220901-20220915/TestExport_6f92daf0-5c57-441d-a386-401ecd240d4c.csv  BlockBlob    Hot          820610    application/octet-stream  2022-10-24T16:06:47+00:00
billing-data/TestExport/20220901-20220915/TestExport_eb4fcbd4-7f59-4eb1-9ad5-38cd9dc84b3f.csv  BlockBlob    Hot          820610    application/octet-stream  2022-10-25T06:37:28+00:00

PythonプログラムでBLOBの確認

実行するプログラム

blob_download.py
import os
from azure.storage.blob import BlobServiceClient

# 接続文字列
CONNECTION_STRING = "[ストレージアカウント接続文字列]"
# コンテナ名
CONTAINER_NAME = "partnercenter"
# ローカルファイルパス(BLOBのターゲットと同一名)
LOCAL_PATH = "billing-data"


# Blobファイルをローカルにダウンロード
def blob_file_download():
    # 接続文字列を用いてBlobServiceClientを作成
    blob_service_client = BlobServiceClient.from_connection_string(CONNECTION_STRING)

    # BLOB一覧の取得
    blob_container = blob_service_client.get_container_client(CONTAINER_NAME)
    blob_list = blob_container.list_blobs()

    # BLOBデータのダウンロード
    print(f'Download target blob : {os.path.join(LOCAL_PATH, "*")}')
    for blob in blob_list :

        # ローカル構成もBLOBディレクトリ構成と同一にする
        if blob.name.startswith(LOCAL_PATH) :

            # ディレクトリはスルー、ファイルのみダウンロード
            if blob.size > 0 :
                dirname, filename = os.path.split(blob.name)
                print("Directory Name : ", dirname)
                print("File Name : ", filename)
                bytes = blob_container.get_blob_client(blob).download_blob().readall()
                save_blob(blob.name, bytes)
        else :
            print(f'Ignore blob : {blob.name}')


# ダウンロードしたBlobファイルをローカルに保存します(既にファイルが存在した場合は上書処理)
def save_blob(file_name, file_content):
    # ディレクトリ(がなければ)作成
    os.makedirs(os.path.dirname(file_name), exist_ok=True)
 
    # ファイル保存(BLOBフォルダと同一構成で保存)
    with open(file_name, "wb") as file:
      file.write(file_content)


if __name__ == "__main__":
    blob_file_download()

プログラムの実行

## 実行
$ python blob_download.py
Download target blob : billing-data/*
Directory Name :  billing-data/TestExport/20220901-20220915
File Name :  TestExport_6f92daf0-5c57-441d-a386-401ecd240d4c.csv
Directory Name :  billing-data/TestExport/20220901-20220915
File Name :  TestExport_eb4fcbd4-7f59-4eb1-9ad5-38cd9dc84b3f.csv

## 確認
$ ls -l billing-data/TestExport/20220901-20220915
total 3216
drwxr-xr-x  4 ihoge  staff     128 10 25 17:07 ./
drwxr-xr-x  3 ihoge  staff      96 10 25 17:07 ../
-rw-r--r--  1 ihoge  staff  820610 10 25 17:21 TestExport_6f92daf0-5c57-441d-a386-401ecd240d4c.csv
-rw-r--r--  1 ihoge  staff  820610 10 25 17:21 TestExport_eb4fcbd4-7f59-4eb1-9ad5-38cd9dc84b3f.csv

まとめ

これで Pythonプログラム で Blob Storage からファイルをダウンロードできました。

参考記事

以下の記事を参考にさせていただきました。感謝申し上げます。
Azureストレージのコンテナーから、Pythonでファイルをダウンロードする
Azureストレージのコンテナーからディレクトリごと一括でダウンロードする

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0