【Python】超簡易買い物リストを作ってみた

買い物メモを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つ削除・全削除のどれかが作動するようにしています。

コメント

タイトルとURLをコピーしました