メインコンテンツへスキップ
このチュートリアルでは、重複したファイル、重複したフォルダ、サイズの大きなファイルを自動的に処理するために、を組み合わせた再帰的アップロードスクリプトを作成する方法を説明します。
このチュートリアルのコードサンプルでは、 を使用しています。

前提条件

  • Boxアプリケーションで [] スコープ (root_readwrite) が有効になっている
  • コンピュータにPython 3.8以降がインストールされている
  • Box Python SDKがインストールされている (pip install "boxsdk~=10")
  • が認証済みである
  • のチュートリアルが完了している (同チュートリアルで定義したfile_uploadおよびfile_upload_chunkedヘルパー関数をこのチュートリアルで再利用し、アップロードロジックの重複を回避する)

重複したフォルダの処理

サブフォルダにアクセスする前に、そのフォルダがすでにBoxに存在しているかどうかを確認します。同名のフォルダが存在する場合は、新規フォルダを作成せずに、既存のフォルダを使用します。
Python v10
from box_sdk_gen import BoxAPIError, CreateFolderParent


def create_or_get_box_folder(client, folder_name, parent_folder_id):
    try:
        folder = client.folders.create_folder(
            folder_name, CreateFolderParent(id=parent_folder_id)
        )
    except BoxAPIError as err:
        if err.response_info.body.get("code") == "item_name_in_use":
            folder_id = err.response_info.context_info["conflicts"][0][
                "id"
            ]
            folder = client.folders.get_folder_by_id(folder_id)
        else:
            raise
    return folder

フォルダの再帰的なアップロード

ローカルディレクトリツリーをたどる1つの再帰的な関数を、複数のヘルパー関数を組み合わせて作成します。各項目で、関数は次の処理を行います。
  1. Box内にフォルダを作成するか、既存のフォルダを取得した後、フォルダを再帰的に処理します。
  2. 直接アップロードか分割アップロードかを選択するためにファイルサイズを確認します。20 MB以上のファイルでは分割アップロード、それよりも小さいファイルでは直接アップロードを使用します。
  3. 同名のファイルがすでに存在する場合は、アップロード方法のチュートリアルで説明したヘルパーを使用して新しいバージョンをアップロードします。
Python v10
import pathlib

MIN_CHUNKED_SIZE = 20 * 1024 * 1024  # 20 MB


def folder_upload(
    client,
    box_base_folder_id,
    local_folder_path,
    min_chunked_size=MIN_CHUNKED_SIZE,
):
    local_folder = pathlib.Path(local_folder_path)
    for item in local_folder.iterdir():
        if item.is_dir():
            new_box_folder = create_box_folder(
                client, item.name, box_base_folder_id
            )
            folder_upload(client, new_box_folder.id, item, min_chunked_size)
        else:
            if item.stat().st_size < min_chunked_size:
                file_upload(client, str(item), box_base_folder_id)
            else:
                file_upload_chunked(client, str(item), box_base_folder_id)
min_chunked_sizeパラメータのデフォルト値は20 MB (の最小サイズ) です。このしきい値を大きくすることはできますが、小さくすることはできません。

サンプル全体

以下のスクリプトでは、Boxクライアントを認証し、保存先フォルダを作成 (または既存フォルダを再利用) して、ローカルディレクトリのコンテンツを再帰的にアップロードします。create_box_folderヘルパーを再利用して、ルートフォルダ ("0") にある保存先フォルダを取得または作成しています。
Python v10
def main():
    client = get_authenticated_client()
    demo_folder = create_box_folder(client, "my-upload-folder", "0")
    folder_upload(client, demo_folder.id, "/path/to/local/folder")


if __name__ == "__main__":
    main()

リソース

最終更新日 2026年7月1日