このプロジェクトは、水泳競技大会における競技プログラムの作成を自動化するシステムです。
手動での競技プログラム作成に多くの時間がかかるという課題を解決し、効率的な運用をサポートします。
- 競技プログラムの作成時間を短縮
手作業で行われていた競技プログラム作成を自動化し、作成にかかる負担を軽減します。 - ヒューマンエラーの削減
自動処理により、データ入力や選手情報の管理におけるミスを減らします。 - 標準化されたフォーマットの提供
統一された形式の競技プログラムを提供し、運営の効率化に貢献します。
このシステムは、水泳大会のエントリーシートを集約し、競技ごとに選手をタイム順に並べ替え、 ID付きの競技プログラムを自動生成します。選手情報はCSVで管理され、最終的な競技プログラムは Excel形式で出力されます。
root/
├── .env # 環境設定ファイル
├── template.xlsx # 出力用テンプレートファイル
├── main.py # メイン実行ファイル
├── input_data_folder/ # 入力データフォルダ
│ ├── [学校名].xlsx # 各学校のエントリーシート
│ ├── [学校名]_個人エントリー.csv # 変換済みCSV
│ └── merged_output.csv # 結合された最終CSVデータ
├── result_output_folder/ # 出力結果フォルダ
│ └── [距離][種目]_id.xlsx # 生成された競技プログラム
├── scripts/ # 処理スクリプト
│ ├── ExcelToMergedCSV.py # Excel→CSV変換・結合
│ ├── get_ID.py # 選手ID取得
│ ├── write_ID.py # Excel書き込み
│ └── fill_name.py # 選手情報補完
├── module/ # ユーティリティモジュール
│ ├── csv_utils.py # CSV操作
│ ├── player_data.py # 選手データモデル
│ └── player_sort_utils.py # ソート処理
└── GUI/ # GUI関連ファイル
└── windows/ # ウィンドウ定義
-
Excel→CSV変換・結合
複数のExcelエントリーシートから必要な情報を抽出し、CSVに変換後、一つのCSVファイルに結合します。 -
データの正規化
選手名、記録時間などのデータを正規化し、一貫した形式に変換します。 -
競技別の選手ソート
各競技種目(自由形、平泳ぎ、背泳ぎ、バタフライ、個人メドレー)と距離(50m、100m、200m、400m)ごとに 選手をタイム順にソートします。 -
ID割り当て
選手ごとに一意のIDを割り当て、プログラム間の参照を容易にします。 -
テンプレートベースの出力
事前に定義されたExcelテンプレートに基づいて、競技プログラムを自動生成します。 -
エラーハンドリング
ファイルの存在確認や形式チェック、処理中のエラー対応など堅牢な例外処理を実装しています。
-
データ収集・前処理
input_data_folder内のExcelエントリーシートを読み込みます。- 「個人エントリー」シートから必要な情報を抽出し、CSVに変換します。
- 全CSVファイルを結合して
merged_output.csvを生成します。
-
データ処理
- 結合CSVから選手オブジェクトを生成します。
- 競技種目・距離ごとにグループ化します。
- タイム順にソートして選手リストを作成します。
-
出力生成
- 各競技種目・距離に対応するExcelファイルを生成します。
- テンプレートを基に、選手IDを適切なセルに配置します。
- 完成したファイルを
result_output_folderに保存します。
- 各学校のエントリーシート(Excel)を
input_data_folderに配置します。 - メインプログラムを実行します。
python main.py- 処理が完了すると、
result_output_folderに各競技種目のExcelファイルが生成されます。
# 出力結果の保存先フォルダ
RESULT_DATA_FILE = result_output_folder
# 入力データの保存先フォルダ
INPUT_DATA_FILE = input_data_folder
# マージ結果の保存先ファイル
MERGED_CSV_DATA_FILE = merged_output.csv
# テンプレートファイル
TEMPLATE_FILE = template.xlsx
- 機能実装の時は必ずブランチを分けて実装する
- 修正の時は、'modify/修正内容'
- 新機能の場合は、'feature/新機能名'
- 新たに関数を作成した場合、その関数の機能について説明をコメントにて書く
# 関数定義例
def calculate_time(time_str: str) -> float:
"""
時間文字列('1:23.45'形式)を秒数に変換する
引数:
time_str: 変換する時間文字列
戻り値:
変換された秒数(float)
"""
# 処理内容
return seconds# 1. リポジトリをクローン(初回のみ)
git clone https://github.com/kanade3256/Outo-made-swim_program.git
cd Outo-made-swim_program
# 2. 最新の変更を取得して main を最新にする
git checkout main # または git switch main
git pull origin main # 最新の変更を取得(fetch + merge)
# 3. 作業ブランチを作成
BRANCH_NAME="feature/新機能名"
git switch -c $BRANCH_NAME # 新しいブランチを作成して切り替え
# 4. コードを編集し、変更をコミット
git add .
git commit -m "機能の説明をここに記述"
# 5. 作業ブランチをリモートにプッシュ
git push -u origin $BRANCH_NAME
# 6. GitHub上でプルリクエストを作成システムは以下のようなエラー状況に対応しています:
- ファイルが見つからない場合
- ファイルへのアクセス権限がない場合
- ファイルの形式が不正な場合
- データの形式や内容に問題がある場合
エラーが発生した場合は、コンソールにメッセージが表示され、詳細なログが app.log に記録されます。