【Python3】業務・課題用フォルダ作成ツールを作成し効率化する

概要

決められた階層構造を指定されたディレクトリ(フォルダ)直下に作成する

効果

・時間の削減
・作成漏れなど手動で起こるミスを減らすことができる
・決められたルールによってディレクトリ構造を作成するため、集計が行いやすい

使用するライブラリ

  • configparser
  • os
  • sys

各ライブラリの主な役割は下記

configparser : .iniファイルの読み取り

os : ファイルパスの連結、ディレクトリの作成

sys : スクリプト起動時の引数を取得

ディレクトリ構造

TaskDirectoryMaker/
    ├conf/
    │ └ setting.ini
    ├test/
    └taskdirectorymaker.py

使い方

①python taskdirectorymaker.py 課題名
例) python taskdirectorymaker.py test_task
②python taskdirectorymaker.py 作成親ディレクトリ 課題名
例) python taskdirectorymaker.py C:\Users test_task

設定ファイル(setting.ini)

[SETTINGS]セクションのparent_directoryに作成したい親ディレクトリを指定

[FOLDER]セクションに作成したい子ディレクトリを指定(実際に作成されるフォルダ名は右辺)

[FILE]セクションに作成したい子ディレクトリごとのファイル(複数の場合「,」区切り)を指定

[SETTINGS]
parent_directory=C:\SampleProject\TaskDirectoryMaker\test
[FOLDER]
design_document=設計
design_document_review=設計レビュー
code_review=コードレビュー
test_document=テスト
test_document_review=テストレビュー
[FILE] 
design_document_review=メモ.txt,レビュー指摘.txt
code_review=メモ.txt,レビュー指摘.txt
test_document=メモ.txt
test_document_review=メモ.txt,レビュー指摘.txt

実装コード(taskdirectorymaker.py)

import sys
import os
import configparser

SETTING_KEY_NAME="SETTINGS"
FOLDER_KEY_NAME="FOLDER"
FILE_KEY_NAME="FILE"
CONF_FILE="conf/setting.ini"

def make_task(parent_dir=None,task_name="task"):
    """
    課題フォルダの作成
    既に課題フォルダが存在する場合は作成しない
    """
    task_path = ""
    conf_path = os.path.join(os.path.dirname(__file__),CONF_FILE)
    config = configparser.ConfigParser()
    config.read(conf_path,'UTF-8')
    if parent_dir is None:
        parent_dir = config[SETTING_KEY_NAME]["parent_directory"]
    
    if os.path.exists(parent_dir) == False:
        return
    task_path = os.path.join(parent_dir,task_name)
    if os.path.exists(task_path):
        return
    os.mkdir(task_path)
    make_subdir(config,task_path)
    

def make_subdir(config,task_dir):
    """
    サブディレクトリの作成
    サブディレクトリに関連したファイルがある場合はそのファイルも作成する
    """
    subdir_list = list(config[FOLDER_KEY_NAME].keys())
    for subdir in subdir_list:
        subdir_path = os.path.join(task_dir,config[FOLDER_KEY_NAME][subdir])
        os.mkdir(subdir_path)
        if subdir in config[FILE_KEY_NAME]:
            file_list = config[FILE_KEY_NAME][subdir].split(",")
            make_files(subdir_path,file_list)


def make_files(parent_dir,file_list):
    """
    サブディレクトリ内のファイル作成
    """
    for file_name in file_list :
        file_path = os.path.join(parent_dir,file_name)
        with open(file_path,"w") as f:
            f.write("####自動生成####")


if __name__ == "__main__":
    args = sys.argv
    if len(args) == 1 or 2 < len(args):
        print("Argments error")
    elif len(args)==2:
        make_task(task_name=args[1])
    else:
        make_task(parent_dir=args[1],task_name=args[2])

 

あわせて読みたい