剛好遇到了這樣的需求,針對同一個檔案想用時間進行簡易的板控,規則如下
如果原始名字是./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)