1

ファイル名のリストが次のとおりであるとします。

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("_")):

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

strftime("%d%b%y")

アンダースコアを使用してすべてを接着しますが、ファイル名の「部分」の数が異なり、日付の「部分」がある位置も異なるため、対話的にこれを実行できるようにしたいと考えています (つまり、名の場合、6 つの「部」があり、日付が 5 番目の「部」であり、2 番目の場合、8 つであり、日付が 6 番目の「部」です)。

列挙子を使用して、数値とテキスト文字列のリストを取得しようとしています。x の範囲を取得し、各ファイル名の部分を反復処理して遊んでいましたが、日付を残りの部分から分離してから、部分をインタラクティブに接着する方法に行き詰まっています。

助言がありますか?ありがとう、マイク

4

3 に答える 3

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']

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

于 2012-04-10T21:41:53.633 に答える
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']
于 2012-04-10T21:40:52.007 に答える
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)
于 2012-04-10T21:41:07.533 に答える