2012-04-10 4 views
1

:私はそれぞれで各ファイル名をdisectしたい分割ファイル名、戻って一緒にファイル名を結合し、ファイル名のリストがあることを考えるのpython

shortname = [H04_IF_FigF2_LCC_05Apr12_mm, H04_BS_IF_FigF2_LCC_05Apr12_mm_2, HH_IF_FigF2_SS_05Apr12_mm, D01_BS_IF_FigF2_LCC_05Apr12_mm_1, D01_BS_FigF2_Overview_05Apr12_mm] 

は、アンダースコア:

for x,y in enumerate(shortname.split("_")): 

をI現在の日付に日付を更新したい:

strftime("%d%b%y") 

そして、それを下線を使用してすべて一緒に接着するが、私はファイル名の「部分」の数が異なっているので対話的にこれを行うことができないようにし、日付「部分」が存在する位置もそうである(すなわち、最初の名前には、6つの "パーツ"があり、日付は5番目の "パーツ"、2番目は8番目の日付は6番目の "パーツ")

私は列挙子を使用しようとしています数字とテキスト文字列のリストを取得します。私は、xの範囲を取得し、各ファイル名の部分を反復しながら遊んだが、残りの部分から日付を分離しようとしていて、どのように対話的に一緒に部品を接着するのですか。

提案がありますか? ありがとう、 マイク

+0

「_mm」は常に日付部分に続くように見えますが、それは正しい仮定ですか? – kaveman

+0

残念なことに、2番目のファイル名では、 "mm"の後ろに "_2"が表示されます。 – Mike

+0

しかし、_mmは、_mmで終わることについて何も言わなかった日付に続きます... リストされていないファイル名... しかし、私は文字列としてコードを見るためにinspect.getsource(shortName)を使うことができると思います。しかし分割したいと思って分割して、コマンドを結合します。 –

答えて

3

を私は単純に日付としてすべてを解析しようとするだろう、と成功すれば更新してください:

import datetime 

shortnames = ['H04_IF_FigF2_LCC_05Apr12_mm', 
      'H04_BS_IF_FigF2_LCC_05Apr12_mm_2', 'HH_IF_FigF2_SS_05Apr12_mm', 
      'D01_BS_IF_FigF2_LCC_05Apr12_mm_1', 'D01_BS_FigF2_Overview_05Apr12_mm'] 

def update_time(name): 
    old_split = name.split('_') 
    new_split = [] 
    date_fmt = '%d%b%y' 
    new_date = datetime.datetime.strftime(datetime.datetime.now(), date_fmt) 
    for n in old_split: 
     try: 
      old_date = datetime.datetime.strptime(n, date_fmt) 
      new_split.append(new_date) 
     except ValueError: 
      new_split.append(n) 
    return '_'.join(new_split) 

>>> [update_time(filename) for filename in shortnames] 
['H04_IF_FigF2_LCC_10Apr12_mm', 'H04_BS_IF_FigF2_LCC_10Apr12_mm_2', 'HH_IF_FigF2_SS_10Apr12_mm', 'D01_BS_IF_FigF2_LCC_10Apr12_mm_1', 'D01_BS_FigF2_Overview_10Apr12_mm'] 

このように、私は内部の詳細を気にする必要はありません。

+0

最高の解決策です。 – luke14free

+0

DSMに感謝します。素晴らしいアプローチとそれは私がそれを望む方法を正確に動作します。 – Mike

2

これはあなたのために機能しますか?あなたは、分割の結果を保つ選択された部品を交換し、新しいファイル名を形成するために再び参加することができます

>>> from datetime import datetime 
>>> name = ["H04_IF_FigF2_LCC_05Apr12_mm", "H04_BS_IF_FigF2_LCC_05Apr12_mm_2", "HH_IF_FigF2_SS_05Apr12_mm", "D01_BS_IF_FigF2_LCC_05Apr12_mm_1", "D01_BS_FigF2_Overview_05Apr12_mm"] 
>>> now = datetime.strftime(datetime.now(),"%d%b%y") 
>>> ["_".join(i.split("_")[:-2]+[now]+[i.split("_")[-1]]) for i in name] 
['H04_IF_FigF2_LCC_10Apr12_mm', 'H04_BS_IF_FigF2_LCC_05Apr12_10Apr12_2', 'HH_IF_FigF2_SS_10Apr12_mm', 'D01_BS_IF_FigF2_LCC_05Apr12_10Apr12_1', 'D01_BS_FigF2_Overview_10Apr12_mm'] 
1

for fn in shortname: 
    parts = fn.split("_") 
    # Ask the user about what date to replace 
    #(skipped, result in variable i) 
    parts[i] = datetime.date.today().strftime("%d%b%y") 
    newname = "_".join(parts) 
    os.rename(fn, newname) 
関連する問題