CSVのファイル名をリストで取得します。
Python
1li = [ 2 "a_20210322153045_user01.csv", 3 "bwq_20210322153046_user08.csv", 4 "cs9j_20210322153047_user03.csv", 5 "aa_20210322153048_user03.csv", 6 "az_20210322153049_user04.csv", 7 "ad_20210322153050_user07.csv", 8 "wa_20210322153051_user32.csv", 9 "eq_20210322153052_user01.csv", 10 "va_20210322153053_user01.csv", 11 "cs_20210322153054_user62.csv" 12]
アンダースコア区切りで、
1番目:特に意味はない文字列がランダムに割り当てられます。
2番目:日時
3番目:ユーザIDとcsv拡張子
これをユーザID重複なしのリストにしたいです。
ただし重複なしのルールとして、重複するデータは、2番目の日時が最新のものを残すとします。
これを実現しようと思って下記のように書いてみました。
方法としては最初にユーザIDのみを重複なしで用意して、それと最新日時を関連付けるようにしました。
一応これでやりたいことは実現できているのかなと思いますが、他にスマートな方法があったら教えてほしいです。
Python:
1import re 2 3li = [ 4 "a_20210322153045_user01.csv", 5 "bwq_20210322153046_user08.csv", 6 "cs9j_20210322153047_user03.csv", 7 "aa_20210322153048_user03.csv", 8 "az_20210322153049_user04.csv", 9 "ad_20210322153050_user07.csv", 10 "wa_20210322153051_user32.csv", 11 "eq_20210322153052_user01.csv", 12 "va_20210322153053_user01.csv", 13 "cs_20210322153054_user62.csv" 14] 15 16user_li = [] 17time_li = [] 18tmp_li = [] 19dst_li = [] 20 21for i in li: 22 user = i.split("_")[2] 23 if not user in user_li: 24 user_li.append(user) 25 26for i in range(len(user_li)): 27 for j in range(len(li)): 28 if user_li[i] == li[j].split("_")[2]: 29 time_li.append(li[j].split("_")[1]) 30 # str型にmax() 31 tmp_li.append([max(time_li), user_li[i]]) 32 time_li = [] 33 34#for i in tmp_li: 35# print(i) 36 37for i in tmp_li: 38 pattern = r".*_" + i[0] + r"_" + i[1] 39 dst_li.append([s for s in li if re.fullmatch(pattern, s)]) 40 41for i in dst_li: 42 print(i)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/23 09:57