Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - ファイルアップロード準備

Python Python
スポンサーリンク
  1. ファイルアップロード準備は「アップロード前にファイルを安全・確実に扱える状態へ整える」ための重要な前処理
  2. アップロード前の基本チェック(サイズ・存在・拡張子)
    1. ファイルがアップロード条件を満たしているか確認するテンプレート
    2. 深掘りポイント
  3. アップロード用にファイル名を整える(リネーム処理)
    1. 日付+連番などのルールに合わせてリネームする
    2. 深掘りポイント
  4. アップロード前に ZIP 圧縮してまとめる(複数ファイル対応)
    1. 複数ファイルを ZIP にまとめるテンプレート
    2. 深掘りポイント
  5. アップロード前にハッシュ値を生成して整合性チェック用に添付する
    1. SHA-256 ハッシュを計算して .hash ファイルとして保存する
    2. 深掘りポイント
  6. アップロード専用フォルダを作り、必要なファイルだけコピーする
    1. 一時フォルダにアップロード対象をまとめる
    2. 深掘りポイント
  7. 例題①:CSV をアップロード用に整形 → ZIP 圧縮 → ハッシュ生成
    1. シナリオ
    2. 深掘りポイント
  8. 例題②:フォルダ内のファイルをアップロード対象だけ抽出して ZIP 化
    1. シナリオ
    2. 深掘りポイント
  9. 例題③:アップロード前にファイルサイズを自動調整(分割)
    1. シナリオ
    2. 深掘りポイント
  10. pathlib を使った読みやすいアップロード準備コード
    1. Path オブジェクトで直感的に書ける
    2. メリット
  11. アップロード準備を業務で設計するときの視点

ファイルアップロード準備は「アップロード前にファイルを安全・確実に扱える状態へ整える」ための重要な前処理

業務システムにファイルをアップロードする前には、単にファイルを置くだけでは不十分です。多くの現場では次のような“前処理”が求められます。

  • ファイル名をルールに合わせてリネームする
  • サイズが大きすぎる場合は分割する
  • 不要なファイルを除外する
  • ZIP/TAR などに圧縮してまとめる
  • ハッシュ値を計算して整合性チェック用に添付する
  • 一時フォルダにコピーしてアップロード専用の構造を作る

Python を使うと、これらを自動化して「アップロード可能な状態」を確実に作れます。


アップロード前の基本チェック(サイズ・存在・拡張子)

ファイルがアップロード条件を満たしているか確認するテンプレート

import os

def validate_file(path, max_mb=50, allowed_ext=(".csv", ".txt", ".zip")):
    if not os.path.exists(path):
        return False, "ファイルが存在しません"

    if not path.lower().endswith(allowed_ext):
        return False, "許可されていない拡張子です"

    size_mb = os.path.getsize(path) / (1024 * 1024)
    if size_mb > max_mb:
        return False, f"サイズ超過({size_mb:.1f}MB)"

    return True, "OK"

print(validate_file("data.csv"))
Python

深掘りポイント

  • アップロード前に「存在・拡張子・サイズ」をチェックするのは基本
  • allowed_ext を変えるだけで業務ルールに合わせられる
  • サイズ超過はアップロード失敗の原因になりやすい

アップロード用にファイル名を整える(リネーム処理)

日付+連番などのルールに合わせてリネームする

import os
from datetime import datetime

def rename_for_upload(path):
    folder, name = os.path.split(path)
    base, ext = os.path.splitext(name)

    today = datetime.now().strftime("%Y%m%d")
    new_name = f"{base}_{today}{ext}"
    new_path = os.path.join(folder, new_name)

    os.rename(path, new_path)
    return new_path

print(rename_for_upload("report.csv"))
Python

深掘りポイント

  • アップロード先で重複しないように日付を付けるのが一般的
  • os.path.splitext() で拡張子を安全に扱える
  • リネームはアップロード前の最もよくある前処理

アップロード前に ZIP 圧縮してまとめる(複数ファイル対応)

複数ファイルを ZIP にまとめるテンプレート

import zipfile

def make_upload_zip(files, zip_name="upload.zip"):
    with zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED) as z:
        for f in files:
            z.write(f)
    return zip_name

make_upload_zip(["data.csv", "info.txt"])
Python

深掘りポイント

  • 複数ファイルを一つにまとめることでアップロードが安定
  • ZIP 圧縮は容量削減にも効果的
  • ZIP_DEFLATED は一般的で扱いやすい圧縮方式

アップロード前にハッシュ値を生成して整合性チェック用に添付する

SHA-256 ハッシュを計算して .hash ファイルとして保存する

import hashlib

def create_hash_file(path):
    h = hashlib.sha256()
    with open(path, "rb") as f:
        while chunk := f.read(1024 * 1024):
            h.update(chunk)

    hash_value = h.hexdigest()
    hash_path = path + ".hash"

    with open(hash_path, "w") as out:
        out.write(hash_value)

    return hash_path

print(create_hash_file("upload.zip"))
Python

深掘りポイント

  • ハッシュ値はアップロード後の整合性チェックに使われる
  • 大容量ファイルでもチャンク読み込みで安全
  • .hash ファイルを添付する運用は多くの企業で採用されている

アップロード専用フォルダを作り、必要なファイルだけコピーする

一時フォルダにアップロード対象をまとめる

import os
import shutil

def prepare_upload_folder(files, upload_dir="upload_ready"):
    os.makedirs(upload_dir, exist_ok=True)

    prepared = []
    for f in files:
        dst = os.path.join(upload_dir, os.path.basename(f))
        shutil.copy2(f, dst)
        prepared.append(dst)

    return prepared

print(prepare_upload_folder(["data.csv", "info.txt"]))
Python

深掘りポイント

  • アップロード前に「専用フォルダ」を作ると作業が安定
  • copy2 は更新日時もコピーするため正確なバックアップになる
  • 不要ファイル混入を防げる

例題①:CSV をアップロード用に整形 → ZIP 圧縮 → ハッシュ生成

シナリオ

data.csv をアップロード用に準備したい。

path = rename_for_upload("data.csv")
zip_path = make_upload_zip([path], "upload.zip")
hash_path = create_hash_file(zip_path)

print("アップロード準備完了:", zip_path, hash_path)
Python

深掘りポイント

  • リネーム → ZIP → ハッシュ の流れは業務で非常に一般的
  • 自動化することでミスを防ぎ、作業時間を短縮できる

例題②:フォルダ内のファイルをアップロード対象だけ抽出して ZIP 化

シナリオ

フォルダ内の .csv だけをアップロードしたい。

import os

def collect_csv(folder):
    return [
        os.path.join(folder, f)
        for f in os.listdir(folder)
        if f.lower().endswith(".csv")
    ]

csv_files = collect_csv("data_folder")
zip_path = make_upload_zip(csv_files, "upload_csv.zip")
Python

深掘りポイント

  • 拡張子フィルタで不要ファイルを除外
  • 大量ファイルの中からアップロード対象だけ抽出できる

例題③:アップロード前にファイルサイズを自動調整(分割)

シナリオ

アップロード上限が 10MB のため、分割して準備したい。

def split_file(src, max_mb=10):
    max_bytes = max_mb * 1024 * 1024
    index = 1

    with open(src, "rb") as f:
        while chunk := f.read(max_bytes):
            part = f"{src}.part{index}"
            with open(part, "wb") as out:
                out.write(chunk)
            index += 1

split_file("large.zip")
Python

深掘りポイント

  • アップロード上限があるシステムでは分割が必須
  • .part1, .part2 のように連番で作成
  • バイナリモードで扱うことでどんなファイルでも分割可能

pathlib を使った読みやすいアップロード準備コード

Path オブジェクトで直感的に書ける

from pathlib import Path
import shutil

def prepare_path_upload(files, upload_dir=Path("upload_ready")):
    upload_dir.mkdir(exist_ok=True)
    prepared = []

    for f in files:
        p = Path(f)
        dst = upload_dir / p.name
        shutil.copy2(p, dst)
        prepared.append(dst)

    return prepared

prepare_path_upload(["data.csv", "info.txt"])
Python

メリット

  • パス結合が / で直感的
  • Path は保守性が高く、業務コードに向いている

アップロード準備を業務で設計するときの視点

  • ファイル名ルール(日時・連番)を統一すると管理が楽
  • サイズ上限がある場合は分割処理を組み込む
  • ZIP 圧縮でまとめるとアップロードが安定
  • ハッシュ値を添付すると整合性チェックが容易
  • 専用フォルダにまとめるとアップロード作業がミスなく進む

タイトルとURLをコピーしました