filter を用いたファイル名の一括変換

元ネタ: ファイル名の一括変換

この手の問題は高階関数を使ったら簡単にできそう、、、と思っていざ書いてみたら、意外と難しかったです。正規表現オブジェクトをグローバル変数にしているのが何か気持ち悪い(- -#

自己評価としては「もう少しがんばりましょう!」な感じです。

#!/bin/env python
"""
change filename
"""
import re

def change_filename(l):
    match = ptrn.search(l)
    date = match.groups()
    print '%s%s%02d%02d.%s' % (
        hdr, year, int(date[0]), int(date[1]), l.rsplit('.')[-1])

if __name__ == '__main__':
    L = []
    ptrn = re.compile(r'(\d+).*?(\d+)')
    hdr = 'FR'
    year = '2009'
    while True:
        s = raw_input()
        if len(s) == 0:
            break
        L.append(s)
    filter(change_filename, L)

実行結果。

$ python change_filename.py
まいにちフランス語_4月13日放送分.mp3
まいにちフランス語_4月14日放送分.mp3
まいにちフランス語_4月15日放送分.mp3

FR20090413.mp3
FR20090414.mp3
FR20090415.mp3