- ファイルアップロード準備は「アップロード前にファイルを安全・確実に扱える状態へ整える」ための重要な前処理
- アップロード前の基本チェック(サイズ・存在・拡張子)
- アップロード用にファイル名を整える(リネーム処理)
- アップロード前に ZIP 圧縮してまとめる(複数ファイル対応)
- アップロード前にハッシュ値を生成して整合性チェック用に添付する
- アップロード専用フォルダを作り、必要なファイルだけコピーする
- 例題①:CSV をアップロード用に整形 → ZIP 圧縮 → ハッシュ生成
- 例題②:フォルダ内のファイルをアップロード対象だけ抽出して ZIP 化
- 例題③:アップロード前にファイルサイズを自動調整(分割)
- pathlib を使った読みやすいアップロード準備コード
- アップロード準備を業務で設計するときの視点
ファイルアップロード準備は「アップロード前にファイルを安全・確実に扱える状態へ整える」ための重要な前処理
業務システムにファイルをアップロードする前には、単にファイルを置くだけでは不十分です。多くの現場では次のような“前処理”が求められます。
- ファイル名をルールに合わせてリネームする
- サイズが大きすぎる場合は分割する
- 不要なファイルを除外する
- 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 圧縮でまとめるとアップロードが安定
- ハッシュ値を添付すると整合性チェックが容易
- 専用フォルダにまとめるとアップロード作業がミスなく進む
