pythonで家計簿を付ける その1
家計簿を付ける習慣がない、でもpythonを書く習慣はある。
だからpythonで家計簿を付けよう。
とりあえず記録するところまで書き終えた。
hab.py
import json import datetime import locale #データ格納先ファイル datafile = "sample.json" #日付情報 thisdate = datetime.date.today() thisyear,thismonth,thisday = str(thisdate).split('-') # データ読み込み def fileinput(filename,encoding): with open(filename,'r',encoding=encoding) as file: return(json.load(file)) #データ上書き def fileoutput(filename,encoding,data): with open(filename,'w',encoding=encoding) as file: json.dump(data,file) #データ書き込み def filewrite(filename,encoding,data): with open(filename,'a',encoding=encoding) as file: json.dump(data,file) #年月日補完 def DatetimeCompletion(data): revdata = data[::-1] if len(revdata) == 3: revdata.append(thisday) if len(revdata) == 4: revdata.append(thismonth) if len(revdata) == 5: revdata.append(thisyear) completedata = revdata[::-1] return(completedata) print("Enter: year month day kind place amount") while True: inputdata = input() if inputdata == "exit": #終了 break elif inputdata == "clear": #データ全削除 fileoutput(datafile,'utf-8',{}) elif inputdata == "view": #情報一覧表示 data = fileinput(datafile,'utf-8') print(data) else: newdata = inputdata.split() #標準入力 completedata = DatetimeCompletion(newdata) #年月日補完 year,month,day,kind,place,amount = completedata #データ振り分け dicdata = {'year':year,'month':day,'day':day,'kind':kind,'place':place,'amount':amount} #辞書にする appenddata = {'year':thisyear,'month':thismonth,'day':thisday,'data':dicdata} #記録年月日を付ける data = fileinput(datafile,'utf-8') #元データ(辞書)を読み込む data[str(len(data)+1)] = appenddata #元データ(辞書)に新しいデータを追加 fileoutput(datafile,'utf-8',data) #json形式で保存
以下のように、"年 月 日 店名 種別 金額" と入力すると
{ナンバリング{記録年月日{入力データ}}}の辞書の形で追加されていく方式。
年月日はそれぞれ省略すると記録した日の情報が適用される。
"view"を入力で一覧を出力、"clear"でデータ全削除、"exit"で終了。
$ python3 hab.py Enter: year month day kind place amount 5 food すき家 610 view {'1': {'day': '07', 'year': '2016', 'month': '06', 'data': {'year': '2016', 'kind': 'food', 'amount': '610', 'place': 'すき家', 'day': '5', 'month': '5'}}} 6 food ローソン 916 2 14 food ローソン 1790 view {'1': {'day': '07', 'year': '2016', 'month': '06', 'data': {'year': '2016', 'kind': 'food', 'amount': '610', 'place': 'すき家', 'day': '5', 'month': '5'}}, '2': {'day': '07', 'month': '06', 'year': '2016', 'data': {'year': '2016', 'kind': 'food', 'amount': '916', 'place': 'ローソン', 'day': '6', 'month': '6'}}, '3': {'day': '07', 'year': '2016', 'month': '06', 'data': {'year': '2016', 'kind': 'food', 'amount': '1790', 'place': 'ローソン', 'day': '14', 'month': '14'}}} exit $
表示や演算の部分の実装はまだこれから。
pandas使って綺麗に表示できると良さげかな。