编写一个Python程序,要求
1. 找出当前目录下所有距离上次修改时间超过1个月的文件
2. 将所有文件重命名,在原本文件名的开头加上最后修改日期
比如原来是projects.zip,则改为2019-09-10-projects.zip
3. 创建一个新文件夹叫backup
4. 将所有重命名后的文件都添加到压缩包里,给压缩包名字加上今天日期
5. 将压缩包移动到backup文件夹里面
6. 删掉原始文件
个人解题思路,先找到一个月前的时间戳,比这个时间戳小的都是一个月之前的。
然后要求1中说明是文件而没有包含文件夹,所以这里要有一个文件夹判断file.os.isdir()
然后循环所有文件的修改时间st_mtime
再把新文件的命名时间规则strftime("%Y-%m-%d")
这样基本前面1-2步骤就能完成
第3步很简单,
判断backup文件夹是否存在,不存在才生成这个文件夹
if not os.path.exists('backup'):
os.mkdir('backup')
第4步要先把所有重命名成功(有些文件的最后一次修改时间不符合要求)的文件收集起来,这里要用到append()
先新建file_list = []
再把重命名成功的文件名加进去。
这样就获取到了文件列表,最后新建一个压缩包,把文件都添加进压缩包,确定好压缩包名称并且移动压缩包即可
最终代码如下:
from datetime import datetime
import os
import time
import shutil
import zipfile
#判断backup文件夹是否存在,不存在才生成这个文件夹
if not os.path.exists('backup'):
os.mkdir('backup')
file_list = []
#这里偷懒直接确定了1个月前的固定时间,获取了时间戳
old_time = datetime(2022,2,23).timestamp()
for file in os.scandir():
if not file.is_dir():
if int(len(str(file.name))) < 9:
if int(file.stat().st_mtime) > int(old_time):
old_name = file.name
new_time = datetime.fromtimestamp(file.stat().st_mtime)
new_name = f'{new_time.strftime("%Y-%m-%d")}-{old_name}'
os.rename(old_name,new_name)
file_list.append(new_name)
zip_filename = f'{datetime.now().strftime("%Y-%m-%d")}.zip'
with zipfile.ZipFile(zip_filename,'w') as zipobj:
for file in file_list:
zipobj.write(file)
shutil.move(zip_filename,'backup/')
print('备份完成')
这里个人加入了一个验证文件名长度的代码,避免第2次循环文件名被继续加长