CrazyRyan
用正則表達式重新命名含時間戳記的檔案

剛好遇到了這樣的需求,針對同一個檔案想用時間進行簡易的板控,規則如下

如果原始名字是
./TEST_recipe.zip
那會輸出
./TEST_recipe_{time_now}.zip
相對的,如果原始名稱包含了時間
./TEST_recipe_202501211117.zip
則會輸出
./TEST_recipe_{time_now}.zip

def generate_new_file_path(file_path):
    time_now = datetime.datetime.now().strftime('%Y%m%d%H%M')
    
    file_name = os.path.basename(file_path)
    file_extension = os.path.splitext(file_name)[1]  # 取得檔案副檔名
    file_name_without_ext = os.path.splitext(os.path.basename(file_path))[0]  # 取得檔案主檔名

    # 用正則表達式判斷檔名是否包含12位數字的時間戳(YYYYMMDDHHMM)
    match = re.search(r'_(\d{12})$', file_name_without_ext)
    if match:
        # 匹配到,則去掉時間戳部分
        base_name = file_name_without_ext[:match.start()]
    else:
        # 未匹配,則保留原始檔案名稱
        base_name = file_name_without_ext

    # 新檔名
    new_file_name = f"{base_name}_{time_now}{file_extension}"
    
    # 新檔路徑
    new_file_path = os.path.join(os.path.dirname(file_path), new_file_name)

    return new_file_path

create_file_path = generate_new_file_path(file_path)
shutil.copy(file_path, create_file_path)