示例#1
0
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)
示例#2
0
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