今回のガジェットは、新しく作ったファイルから日付とタイトルを取得しリストに自動的に記入してくれるガジェットです。
例えばこんな状況で
日々の作業で行ったことをこれまでは、いちいちリストに日付とタイトルを記入して管理していました。オリジナルとして作成したもの、反復練習として行ったもの、他の人の書いたコードで読んで実際に書いて試したものなどなど。いちいちリストに書くのがとてもだるかったのですが、今回、作ったファイルの名前と作成日を自動的にリストに転記してくれるようにすることで日々のリスト記入の作業を無くすことにしました。このガジェットで、自動でリストをつけ、日々の作業記録を残すことができるようになりました。
このガジェットでできることはこちら
作ったファイルを保管しているフォルダからタイトルと日付を取得します。
取得した情報をリストに転記します。フォルダ名に日付、タイトルなど必要な情報を入れているのでフォルダ名から取得します。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()