重命名文件以包含基于前一个工作日的后缀

Rename Files to include a suffix based on the previous business day

我在一个目录中有一组文件。文件名保持不变,但每个文件的内容每天更新,并且文件具有不同的扩展名(.pptx、.xlsx、.xlsm)。每天更新文件后,我想重命名它们以包含一个依赖于前一个工作日的字符串(_MON、_TUE、_WED、_THU、_FRI)。后缀应在原始文件名之后和文件扩展名之前。我正在寻找的格式是 filename.dayofweeksuffix.fileextension。我能够使用下面的代码完成此操作,但它看起来笨拙且重复,我知道必须有更简单的方法来完成任务。我从事 IT 工作多年,但我是 python 的初学者,非常感谢您提供的任何帮助或建议。下面是我的代码,用于星期一,它向所有文件名添加了 _FRI。下面的代码块在我周二、周三、周四和周五的 python 文件中重复出现,它似乎不必要地冗长和重复。

我的想法是,我可以为文件路径和文件名创建变量,然后在 os.rename 函数中将它们连接在一起。我正在努力解决的部分是如何根据一周中的当前日期使前一个工作日后缀动态化。

我创建了一个元组,其中包含我想要 select 来自的后缀。

weekday_tuple = ("_MON","_TUE","_WED","_THU","_FRI","_SAT","_SUN")

但我不确定如何根据星期几从元组动态地 select 上一个工作日的后缀。

谢谢

import datetime
import os
import shutil as sl

datetime.datetime.today().weekday()

if datetime.datetime.today().weekday() == 0:

os.rename("my file path\my file 1 name.pptx", "my new file path\my new file 1 name_FRI.pptx")

os.rename("my file path\my file 2 name.xlsx", "my new file path\my new file 2 name_FRI.xlsx")

os.rename("my file path\my file 3 name.xlsx", "my new file path\my new file 3 name_FRI.xlsx")

os.rename("my file path\my file 4 name.xlsm", "my new file path\my new file 4 name_FRI.xlsm")

os.rename("my file path\my file 5 name.xlsm", "my new file path\my new file 5 name_FRI.xlsm")

os.rename("my file path\my file 6 name.xlsx", "my new file path\my new file 6 name_FRI.xlsx")
 
os.rename("my file path\my file 7 name.xlsm", "my new file path\my new file 7 name_FRI.xlsm")

os.rename("my file path\my file 8 name.xlsx", "my new file path\my new file 8 name_FRI.xlsx")

os.rename("my file path\my file 9 name.xlsx", "my new file path\my new file 9 name_FRI.xlsx")

os.rename("my file path\my file 10 name.xlsx", "my new file path\my new file 10 name_FRI.xlsx")

#code repeats for the other 4 business days

我可能遗漏了什么,但为什么不使用昨天的日期呢?然后你只需用这个连接你的路径名。

import datetime
import os


weekday_tuple = ("_MON","_TUE","_WED","_THU","_FRI","_SAT","_SUN")

yesterday = weekday_tuple[(datetime.datetime.today()- datetime.timedelta(days=1)).weekday()]

os.rename("my_file_name.pptx", "my_new_file_name"+yesterday+".pptx")

注意:您的代码中存在一些缩进问题,另外,我不确定您的 if 情况应该如何处理,因此我的回答适用于您的书面问题。剩下的只是循环查找文件夹中的文件并移动它们(使用 os.listdiros.walk)。

编辑 2.2。 如果您不希望那里有星期日和星期六,一个简单的解决方法是在字典中将它们替换为星期五,其余保持不变。

weekday_tuple = ("_MON","_TUE","_WED","_THU","_FRI","_FRI","_FRI")

也许如果你详细说明(数据在周末移动,即,你可以 65 用于 yesterday 吗?如果没有,你可以使用@serrobit 提出的一个字典并删除它们。但是这个解决方案在你搬家时更健壮,而且不花任何钱。

你可以创建一个字典

EXTENSIONS =  {0: '_FRI', 1: '_FRI', 2: '_MON', 3: '_TUE', 4: '_WED', 5: '_THU', 6: '_FRI'} 

然后是你的文件

files = ["file1.xlsx", "file2.xlsm", "file3.pptx"]
new_filenames = { old_filename : f"{old_filename.split('.')[0]}{EXTENSIONS[datetime.datetime.today().day]}.{old_filename.split('.')[1]}" for old_filename in files}

由于今天是星期一,这应该产生 new_filenames:

{'file1.xlsx': 'file1_SUN.xlsx', 'file2.xlsm': 'file2_SUN.xlsm', 'file3.pptx': 'file3_SUN.pptx'}

然后遍历 new_filenames:

的项目
for old, new in new_filenames.items():
        os.rename(old,new)

这里还有一件事要注意,datetime.strftime 具有(缩写)日期名称的格式规范 %a

import datetime

now = datetime.datetime.now()
day = datetime.timedelta(days=1)

filepath = (now - day).strftime("/path/to/file_%a")

print(filepath)  # /path/to/file_Mon