私はファイル名のリストを使って作業しています。重複はなく、リストはソートされます。リストをサブセットの場所に基づいてリストのリストに変更します
リストはサブセットにグループ化できます。名前に_0001
があるファイルは、新しいサブセットの開始を示します。次に_0002
はサブセットの2番目の項目です。このフラットリストを階層リストに変換したいと思います。ここで
は、元の、フラットリストの例である:
['Log_03-22-2016_12-06-18_GMT_0001.log',
'Log_03-22-2016_12-10-41_GMT_0002.log',
'Log_03-22-2016_12-11-56_GMT_0003.log',
'Log_03-22-2016_12-13-12_GMT_0004.log',
'Log_03-22-2016_12-14-27_GMT_0005.log',
'Log_03-22-2016_12-15-43_GMT_0006.log',
'Log_03-22-2016_12-16-58_GMT_0007.log',
'Log_03-23-2016_09-08-57_GMT_0001.log',
'Log_03-23-2016_09-13-24_GMT_0002.log',
'Log_03-23-2016_09-14-26_GMT_0003.log',
'Log_03-23-2016_09-15-27_GMT_0004.log',
'Log_03-23-2016_11-17-57_GMT_0001.log',
'Log_03-23-2016_11-19-21_GMT_0002.log']
私は新しいサブセットの始まりを検出するために、_0001
の存在を使用して、サブセットのリストにこれをスライスしたいと思います。サブセットのすべてのリストのリストを返します。上記の入力を使用した出力の例を次に示します。
[['Log_03-22-2016_12-06-18_GMT_0001.log',
'Log_03-22-2016_12-10-41_GMT_0002.log',
'Log_03-22-2016_12-11-56_GMT_0003.log',
'Log_03-22-2016_12-13-12_GMT_0004.log',
'Log_03-22-2016_12-14-27_GMT_0005.log',
'Log_03-22-2016_12-15-43_GMT_0006.log',
'Log_03-22-2016_12-16-58_GMT_0007.log'],
['Log_03-23-2016_09-08-57_GMT_0001.log',
'Log_03-23-2016_09-13-24_GMT_0002.log',
'Log_03-23-2016_09-14-26_GMT_0003.log',
'Log_03-23-2016_09-15-27_GMT_0004.log'],
['Log_03-23-2016_11-17-57_GMT_0001.log',
'Log_03-23-2016_11-19-21_GMT_0002.log']]
ここに私の解決策があります。
import glob
first_log_indicator = '_0001'
log_files = sorted(glob.glob('Log_*_GMT_*.log'))
first_logs = [s for s in log_files if first_log_indicator in s]
LofL = []
if len(first_logs) > 1:
for fl_idx, fl_name in enumerate(first_logs):
start_slice = log_files.index(fl_name)
if fl_idx + 1 < len(first_logs):
stop_slice = log_files.index(first_logs[fl_idx+1])
LofL.append(log_files[start_slice:stop_slice])
else:
LofL.append(log_files[start_slice:])
else:
LofL.append(log_files)
は私がitertools
に見えた、と私はそのモジュールと明らかに不慣れだが、私は非常にこれをしなかった何も表示されませんでした:それはありますが、これを行うための、よりエレガントでPython的な方法であるべきように思えます。
私が見つけた最も近い質問には、サブリストがfixed lengthでした。ここで、サブリストは任意の長さである。他の者は、元の(平らな)リスト内のサブリストを区切るために "separator"の存在を使用し、最終的にリストのリストを作成するときに投げ捨てられる。私はその意味でセパレータを持っていません。なぜなら、私は元のリストにアイテムを捨てたくないからです。
誰でも上記のものよりも良いアプローチを提案できますか?
私は、これはあなたが探しているものだと思う。http://stackoverflow.com/質問/ 15357830/python-spliting-a-list-on-a-delimiter-wordです。エンドスワップチェックを適用する必要があることを除いて。 – alecxe