買い物メモをEvernoteで管理していたのですが、動作が遅めなのが悩みでした。
買い物メモをターミナルから追加したり削除したり表示したりできたら便利かなと思って作ってみました。
自分が欲しい機能を搭載して、シンプルに作成してみました。
超簡易買い物リストのPythonファイル(使い方の説明)
用意しているファイルはこちらです。
- kaimono_list.py(実行ファイル)
- kaimono_list.csv(現在の買い物リスト)
- dct.csv(アイテムを表示する順番を保存している辞書)
超簡易買い物リストの機能はこちらです。
- 商品を1つ追加
- 商品を1つ削除
- 全商品を表示
- 全商品を削除
全商品を表示
% python3 kaimono_list.py display
#出力
item
0 nattou
1 retasu
2 udon
アイテムの表示
python3 kaimono_list.py display で、現在kaimono_listに保存されているitemが、dct.csvの辞書順に表示されます。
この状態で、komatsunaを追加してみます。
商品を1つ追加
% python3 kaimono_list.py komatsuna #出力 item 0 nattou 1 komatsuna 2 retasu 3 udon komatsunaを追加しました
python3 kaimono_list.py komatsuna とすると、dct.csvの辞書順にそって、komatsunaが追加されます。
次はこの状態からretasuを削除してみます。
商品を1つ削除
% python3 kaimono_list.py -retasu #出力 item 0 nattou 1 komatsuna 2 udon retasuを削除しました
項目を1つ削除するときには、アイテム名の前に「-(マイナス)」をつけます。
全商品を削除
% python3 kaimono_list.py reset #出力 Empty DataFrame Columns: [item] Index: [] リセットが完了しました
python3 kaimono_list.py resetで全てのitemが消去されます。
Pythonファイル
作成したPythonコードはこちらです。
import sys
import pandas as pd
import os
import csv
my_func = 'item_add'
#ターミナルから引数を受け取る
args = sys.argv
df = pd.read_csv('kaimono_list.csv')
dict_from_csv = pd.read_csv('dct.csv', header=None, index_col=0, squeeze=True).to_dict()
def action_func(df, hikisuu):
if hikisuu == 'reset':
item_list = []
df1 = pd.DataFrame(item_list, columns=['item'])
message = 'リセットが完了しました'
return df1, message
elif hikisuu == 'display':
message = 'アイテムの表示。'
return df, message
elif hikisuu[0] == '-':
item_list = []
item_list = df['item'].tolist()
item_list.remove(hikisuu[1:])
df1 = pd.DataFrame(item_list, columns=['item'])
message = hikisuu[1:] + 'を削除しました'
return df1, message
else:
item_list = []
item_list = df['item'].tolist()
if hikisuu in item_list:
message = f'すでに{hikisuu}は存在しています。'
else:
#引数がなければ辞書に追加
if hikisuu not in dict_from_csv:
dict_from_csv[hikisuu] = len(dict_from_csv)
else:
pass
item_list.append(hikisuu)
message = f'{hikisuu}を追加しました。'
#辞書をもとに、新しい買い物リストを作成
new_item_list = []
for key in dict_from_csv:
if key in item_list:
new_item_list.append(key)
else:
pass
df1 = pd.DataFrame(new_item_list, columns=['item'])
#dct = {'nattou': 0,'banana': 1,'komatsuna': 2,'tomato': 3,'retasu': 4,'kyabetsu': 5,'daikon': 6}
with open('dct.csv', 'w') as f:
writer = csv.writer(f)
for k, v in dict_from_csv.items():
writer.writerow([k, v])
return df1, message
df, message = action_func(df, args[1])
print(df)
print(message)
df.to_csv('kaimono_list.csv', index=False)
% python3 kaimono_list.pyの後にdisplayまたはkomatsunaまたは-retasuまたはreset)を指定することで、表示・1つ追加・1つ削除・全削除のどれかが作動するようにしています。


コメント