"*****_name_dateAndNum.csv"
という形式のファイル名のリストがあります。
その内、Numが同じものについては
nameが同じ場合、日時のデータが新しいものを残し、古い方は消します。
(dataは年~分、Numはピリオド前の2桁の数字)
Python
1# 元データ 2files = [ 3 "AAA_A01_20201030040000.csv", # <--- Numが00だがA01は1つしかないので残す 4 "AAB_A02_20201030040001.csv", # <--- Numが01でA02は2つあるので、日時が古いこのデータは消す 5 "CBA_A02_20201030041001.csv", # <--- Numが01でA02は2つあるので、日時が新しいこのデータは残す 6 "DD0_A03_20201030040000.csv", # <--- Numが00だがA03は1つしかないので残す 7 "DD0_A03_20201030040002.csv" # <--- Numが02のものは1つしかないので残す 8]
Python
1# 処理後 2files = [ 3 "AAA_A01_20201030040000.csv", 4 "CBA_A02_20201030041001.csv", 5 "DD0_A03_20201030040000.csv", 6 "DD0_A03_20201030040002.csv" 7]
前回の質問の回答にありましたpandasを使えば実現は可能かもしれませんが、
使い方が分からず実装が出来ません。
自分の方ではpandasを使えないので、使わずにできるかどうかを試しました。
無理でしたが・・・。
Python
1files = [ 2 "AAA_A01_20201030040000.csv", 3 "AAB_A02_20201030040001.csv", 4 "CBA_A02_20201030041001.csv", 5 "DD0_A03_20201030040000.csv", 6 "DD0_A03_20201030040002.csv" 7] 8 9# 案 10# リストをコピーしておいて、不要と判断した部分をリストから削除 11# (空のリストに必要と判断した部分を追加してもいい) 12# 問題は、「不要(または必要)と判断する」という部分がわからない 13 14backup = files 15 16# 消すやつを控えておく 17delete = [] 18 19for i in range(len(files)): 20 for j in range(len(backup)): 21 # Numが一致しているか 22 if files[i][-6:-4] == backup[j][-6:-4]: 23 # nameが一致しているか 24 tmp1 = files[i].split("_") 25 tmp2 = backup[j].split("_") 26 if tmp1[1] == tmp2[1]: 27 # 時間が古いなら削除候補に追加 28 if tmp1[2][0:12] > tmp2[2][0:12]: 29 delete.append(backup[j]) 30 31for i in range(len(delete)): 32 # 削除候補のデータが含まれていれば消す 33 if delete[i] in backup: 34 backup.pop(backup.index(delete[i])) 35 36# このbackupに対象データのみを入れたい 37print(backup)
回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー