拆分文件名,更新日期,重新加入文件名,python

时间:2012-04-10 21:28:15

标签: python range enumerate

鉴于文件名列表为:

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个“部分”,在第二个中,有8个,日期是第6个“部分”)

我正在尝试使用枚举器来获取数字和文本字符串列表。我玩弄了一系列x并迭代了每个文件名部分,但我仍然试图将日期与其余部分隔离开,然后如何以交互方式将部件粘合在一起。

有什么建议吗? 谢谢, 麦克

3 个答案:

答案 0 :(得分: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']

这样我就不必关心任何内部细节了。

答案 1 :(得分: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']

答案 2 :(得分: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)