ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

pythonで自動的にリストを管理する【google スプレッドシート】

今回のガジェットは、新しく作ったファイルから日付とタイトルを取得しリストに自動的に記入してくれるガジェットです。

 

例えばこんな状況で

日々の作業で行ったことをこれまでは、いちいちリストに日付とタイトルを記入して管理していました。オリジナルとして作成したもの、反復練習として行ったもの、他の人の書いたコードで読んで実際に書いて試したものなどなど。いちいちリストに書くのがとてもだるかったのですが、今回、作ったファイルの名前と作成日を自動的にリストに転記してくれるようにすることで日々のリスト記入の作業を無くすことにしました。このガジェットで、自動でリストをつけ、日々の作業記録を残すことができるようになりました。

 

このガジェットでできることはこちら

作ったファイルを保管しているフォルダからタイトルと日付を取得します。
取得した情報をリストに転記します。フォルダ名に日付、タイトルなど必要な情報を入れているのでフォルダ名から取得します。automaterで深夜の1時に自動的に動いてリストに転記します。作業後、手動でリストをつけて管理する必要がなくなりました。


評価(自己)

役立ち度  ★★★★(良し)
効率化   ★★★★(良し)
ミス防止  ★★★(平均)
楽しさ   ★★★★(良し)
操作    ★★★★(良し)

 

実行環境

使用環境    gspread 
使用言語    python
使用ライブラリ  glob、pandas、shutil、oauth2client

 

コード

from glob import glob
import pandas as pd
import shutil
import os
import gspread
from oauth2client.service_account import ServiceAccountCredentials

def auth():
    SP_CREDENTIAL_FILE = 'secret.json'
    SP_SCOPE = [
            'https://spreadsheets.google.com/feeds',
            'https://www.googleapis.com/auth/drive'
        ]
    SP_SHEET_KEY = '<シートのID>'
    SP_SHEET1 = 'オリジナル'
    SP_SHEET2 = 'コード読破'
    SP_SHEET3 = '反復'


    credentials = ServiceAccountCredentials.from_json_keyfile_name(SP_CREDENTIAL_FILE, SP_SCOPE)
    gc = gspread.authorize(credentials)

    sh = gc.open_by_key(SP_SHEET_KEY)
    worksheet1 = sh.worksheet(SP_SHEET1)
    worksheet2 = sh.worksheet(SP_SHEET2)
    worksheet3 = sh.worksheet(SP_SHEET3)
    return worksheet1, worksheet2, worksheet3


def add_dirs(sheet, bef_dir, aft_dir):
    df_new = pd.DataFrame()
    for dirname in bef_dir:
        num, name, date = dirname.split('/')[2].split('_')
        _df = pd.DataFrame([dict(課題No=int(num), タイトル=name, 日付=date)])
        df_new = pd.concat([df_new, _df])
        shutil.move(dirname, aft_dir)
    data = sheet.get_all_values()
    df = pd.DataFrame(data[1:])
    df.columns = data[0]
    df = pd.concat([df, df_new])
    sheet.update([df.columns.values.tolist()] + df.values.tolist())
    
    
def add_training(sheet, bef_dir, aft_dir):
    df_new = pd.DataFrame()
    for dirname in bef_dir:
        num, name, q_num = dirname.split('/')[2].split('_')
        _df = pd.DataFrame([dict(課題No=int(num), タイトル=name, 問題数=int(q_num))])
        df_new = pd.concat([df_new, _df])
        shutil.move(dirname, aft_dir)
    data = sheet.get_all_values()
    df = pd.DataFrame(data[1:])
    df.columns = data[0]
    df = pd.concat([df, df_new])
    sheet.update([df.columns.values.tolist()] + df.values.tolist())

    
def main():
    worksheet1, worksheet2, worksheet3 = auth()
    
    bef_original = glob('オリジナル/bef/*')
    aft_original = 'オリジナル/aft'
    bef_cordreading = glob('コードリード/bef/*')
    aft_cordreading = 'コードリード/aft'
    bef_training = glob('トレーニング/bef/*')
    aft_training = 'トレーニング/aft'
    
    
    if bef_original != []:
        add_dirs(worksheet1, bef_original, aft_original)
    if bef_cordreading != []:
        add_dirs(worksheet2, bef_cordreading, aft_cordreading)
    if bef_training != []:
        add_training(worksheet3, bef_training, aft_training)
        

if __name__ == '__main__':
    main()