6.08.2013

取得したログの仕分け機能実現に向けていろいろ検討、makedirsとshutil関数で処理。





3cd_configとかLoggetは取得ログが大量になりがちなので、ログの整理機能が少なからず必要かなあと思っている。


前回の改行コード改修の時点で構想は出来上がっていたので、実装をしようと思ってはいたのだけど、日付で分けるかIPアドレスで分けるかの結論が出ずに断念した。

後々日付でわけるかIPアドレスで分けるかはconfig.iniで選んでもらえる仕様にするとして、いろいろ実装方式を検討していたわけだけども、ディレクトリ作成とmoveでいろいろめんどくさかったので書いておこうと思う。

ディレクトリの作成についてはmakedirs関数を使って書くのがいいと思うんだけど、フォルダが既に存在する場合に上書きができずにエラーが返ってくるんで、まずフォルダがpathに存在するかどうかを調べて、そんでもって処理を分けちまえばいいと思う。

def make_dir(date,dirc):
# pathを検索して、ディレクトリを作成する
    print 'make_dirが呼び出されました'
    print date + 'を処理しています。'
    date = re.match('[0-9]{8}',date)
    date = date.group()
    path = os.listdir(dirc)
    if date in path:
        os.chdir(dirc)
        print 'このディレクトリは存在します'
        file_move(date,dirc)
    else:
        os.chdir(dirc)
        os.makedirs(date,mode=0770)
        print 'ディレクトリを作成します'
        file_move(date,dirc)

mainからdateとdircの引数を渡してあげて、pathの中に日付フォルダがなければmakedirsでフォルダを作成する。pathの中に日付フォルダがあれば、フォルダ作成処理は飛ばして、さくっとログのmove処理に飛ばしてしまう。


ほんでもってうっとうしいんだけど、ログを移動するためのshutil.move関数も移動先に同名のログが存在する場合は上書きできないでエラーが返ってくる

だもんで、move処理のときもpathの中を調べてログを移動してあげればいいとおもう。

def file_move(date,dirc):
#pathをゲットしてファイルを移動する
    print 'file_moveが呼び出されました'
    path = os.listdir(dirc)
    for logs in path:
        logs = re.match(date + '.*(\.txt|\.log)',logs)
        print 'file_moveを処理します'
        if logs == None:
            print 'logsはnoneです'
        else:
            logs = logs.group()
            if logs in path:
                print '移動先フォルダにファイルが存在します'
                print logs + 'は移動されません'
            else:
                shutil.move(logs,date)

なんか冗長な感じの処理だけど、shutilから返ってくるエラーがどう書いてもさばけなかったので、とりあえず緩やかに処理する感じにすることにした。

make_dirから渡したdate引数を元に、moveするログをつかんで、pathの中にログがなければelseに飛ばしてshutil.move処理を行う。pathにログを見つけたらとりあえずログを移動しないよっていうprint文を表示して、メインループに戻るって感じで。

ファイルを移動するだけのそんなに重くない処理だから、ちょっと冗長な感じでもいいかなって思う。




0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...