2012-04-10 58 views
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] 

我想每到disect每個文件名強調:

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

我想要將日期更新到當前日期:

strftime("%d%b%y") 

然後用下劃線將它們全部粘在一起,但是我wa nt它能夠交互地做到這一點,因爲文件名的「部分」的數量是不同的,日期「部分」所處的位置也是如此(即,在第一個名稱中,有6個「部分」,日期是第5個「部分」,第二個,有八個,日期是第六個「部分」)

我想使用枚舉器獲取數字和文本字符串的列表。我玩弄了一系列x並遍歷每個文件名部分,但是我一直試圖將日期與其餘部分隔離開來,然後如何交互地將這些部分粘合在一起。

有什麼建議嗎? 謝謝, 邁克

+0

看起來'_mm'總是跟着日期部分,這是一個正確的假設嗎? – kaveman 2012-04-10 21:32:45

+0

不幸的是,在第二個文件名中,在「mm」 – Mike 2012-04-10 21:35:02

+0

後面的末尾會看到一個「_2」,但是_mm仍然跟着他沒有結束_mm的日期... 那些看起來像您的變量名列表不是文件名... 但我認爲你可以使用inspect.getsource(shortName)將代碼看作一個字符串並將其拆分,然而你想要使用拆分和連接命令 – 2012-04-10 21:36:52

回答

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 2012-04-10 21:48:32

+0

感謝帝斯曼。偉大的方法,它的工作原理是如何我想要的。 – Mike 2012-04-10 23:12:21

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)