前提・実現したいこと
pythonで、実行ファイル直下のフォルダ(たとえば、csvdata)に入れているcsvデータを読み取って、
一定のルールでグループ分けしてlistやdictに格納したいと考えています。
(ファイル名のフォーマット)識別子1_id_適当な番号_日付(yymmdd)_時間(hhmmss).csv
→これを、日付が同じで、時間が5分未満の差のものを一つのグループに分けて保存したい。
(例) aaa_1_1_20190302_110504.csv
aab_3_5_20190302_110911.csv
acb_2_4_20190302_111003.csv
cbz_2_6_20190303_111004.csv
とあった場合、1番目と2番目、3番目で一つのグループ、4番目で一つのグループ、
のような形で分けたいと考えています。グループは、連番でもいいと思っているので、
たとえば、{1:[aaa_1_1_20190302_110504.csv, aab_3_5_20190302_110911.csv, acb_2_4_20190302_111003.csv],
2:[cbz_2_6_20190303_111004.csv]}
のような形に分けられたら良いと思っています。
発生している問題・エラーメッセージ
pathlibを使って、フォルダ全体を取得し、splitで分解するところまでは作れたのですが、
以下2点について伺いたく思います。
①条件に合うものをリストに入れることはできたのですが、これをグループ分け(別のリストもしくは辞書)
する方法が分かりません。(辞書の中にリストを入れる?)
②下記のコードでやっている方法はいまいちスマートではないような気がしますので、もしほかに良い方法などありましたら
ご教示いただければ幸いです。
該当のソースコード
python
1import pathlib 2import glob 3import pprint 4 5p_temp = pathlib.Path("csvdata") 6pprint.pprint(list(p_temp.glob('*.csv'))) 7 8csvs = p_temp.glob('*.csv') 9lst_csvs = [] 10dict_csvs = {} 11group_no = 1 12temp_ymd, temp_time = None, None 13 14for i in csvs: 15 _, id, pos, _, ymd, time = str(i).split('_')[:] 16 print(pos, ymd, time[0:7]) 17 18 if( (temp_ymd == ymd) and (abs(temp_time - int(time[0:7]))<5000 )): 19 lst_csvs.append(str(i)) 20 else: 21 temp_ymd, temp_time = ymd, int(time[0:7]) 22 print(temp_ymd, temp_time) 23 24print(lst_csvs)
試したこと
関連ライブラリの情報を検索した。
jupyterでサンプルコードを作って試行錯誤した。
回答1件
あなたの回答
tips
プレビュー