def update_use_times(author): """ 「./user_log/ユーザー名.csv」を読み込み、「date」、「use_times」列で一意のkeyとして 利用回数をインクリメントして更新する Parameters ------------------------------ author : str ユーザー名 Returns ------------------------------ Nothing """ current_date = datetime.date.today().strftime( '%Y-%m-%d') #date型のままだとqueryの条件で型が一致しないため、strに変換する user_log_data = pd.read_csv(f'{USER_FILE_PATH}/{author}.csv', encoding='utf-8', engine='python') current_user_data = user_log_data.query( 'user_id == @author and date == @current_date') log_obj = LogObject() log_obj.user_id = author log_obj.date = current_date if len(current_user_data) == 0: # 今日初めての利用の場合は、行が存在しないので、利用回数1回の行を新規で作成し、DataFrameに追加してcsvを更新する log_obj.use_times = 1 s = pd.Series([log_obj.user_id, log_obj.date, log_obj.use_times], index=user_log_data.columns) user_log_data = user_log_data.append(s, ignore_index=True) elif current_user_data['use_times'].values[0] != DATE_USE_LIMIT: # 今日の今までの利用回数が19回以下の場合は、該当ユーザーのDataFrameの利用回数を+1してcsvを更新する use_times = current_user_data['use_times'].values[0] + 1 user_log_data.loc[(user_log_data['user_id'] == author) & (user_log_data['date'] == current_date), ['use_times']] = use_times user_log_data.to_csv(f'{USER_FILE_PATH}/{author}.csv', encoding='utf-8', index=False)
def check_use_times(author): """ 「./user_log/ユーザー名.csv」が存在するか判定し、以下の処理を行う。 存在しない場合は以下のヘッダーのCSVファイルを出力する。 ['user_id','date','use_times'] 「./user_log/ユーザー名.csv」を読み込み、「date」、「use_times」列で一意のkeyとして利用回数を判定する 指定した上限回数より少ない場合は「True」、多い場合はFalseを返す Parameters ------------------------------ author : str ユーザー名 Returns ------------------------------ ret_flg : bool 利用回数が上限回数以内かどうか """ author = str(author).split('#')[0] #そのまま使うとauthorの末尾に「#xxx」が付いてしまうため取り除く if not os.path.exists(f'{USER_FILE_PATH}/{author}.csv'): with open(f'{USER_FILE_PATH}/{author}.csv', 'w', encoding='utf-8', newline='') as output_stream: writer = csv.writer(output_stream) header = ['user_id', 'date', 'use_times'] writer.writerow(header) current_date = datetime.date.today().strftime( '%Y-%m-%d') #date型のままだとqueryの条件で型が一致しないため、strに変換する user_log_data = pd.read_csv(f'{USER_FILE_PATH}/{author}.csv', encoding='utf-8', engine='python') current_user_data = user_log_data.query( 'user_id == @author and date == @current_date') ret_flg = None log_obj = LogObject() log_obj.user_id = author log_obj.date = current_date if len(current_user_data) == 0: # 今日初めての利用の場合 ret_flg = True else: if current_user_data['use_times'].values[0] != DATE_USE_LIMIT: # 今日の今までの利用回数が指定回数以下の場合 ret_flg = True else: # 今日の今までの利用回数が指定回数以上の場合 ret_flg = False if ret_flg: user_log_data.to_csv(f'{USER_FILE_PATH}/{author}.csv', encoding='utf-8', index=False) return ret_flg