我工作的时候经常遇到这个问题:需要批量生成带内容的文件夹来辅助工作。
我有8种不同名字的文件夹
每个文件夹下面都有以日期命名的文件夹
日期文件夹里面会记录我当天需要记录的东西。
我需要实现的功能是:
1.输入一个天数N,生成N天以前的文件
在test文件夹里的子文件夹test*里面:
2.复制当天的文件夹
3.重命名:以日期命名
以下是我自己画的文件夹层级结构图:
(日期文件夹中的文件没有写出来,下面的全部都是文件夹)
以下是代码实现:
1.弹窗选择文件夹:E:\Test
2.输入天数N
3.获取当天的文件夹名
4.循环复制,改名
import datetime
import shutil
import tkinter
from tkinter import filedialog
from tkinter import simpledialog
import os
import fnmatch
import tkinter.messagebox as me
root=tkinter.Tk()
root.withdraw()
rootPath=filedialog.askdirectory()
days=int(simpledialog.askstring(title=" ",prompt="生成XX天以前的文件,\n如果某个test文件夹原本没有当天文件,那么不会生成之前的文件"))
day=1
dirLogToday=datetime.datetime.now().date()
while day<=days:
for dirpaths,dirnames,filenames in os.walk(rootPath):
for dirname in dirnames:
if fnmatch.fnmatch(dirname,"*-*-*"):
dirPath=os.path.join(dirpaths,dirname)
savePath=os.path.join(dirpaths,str(dirLogToday-datetime.timedelta(day)))
if not os.path.exists(savePath):
shutil.copytree(dirPath,savePath)
day = day + 1
me.showinfo("结束弹窗","操作完成!!!!!!")
在while循环里:
1.用walk获取E:\Test中所有文件夹路径、文件夹名字,文件名
2.在所有文件夹名中匹配文件名为*-*-*的文件夹
3.用一个变量dirPath记录这个文件夹的路径,便于后面的复制。比如:E:\Test\Test1\2023-04-20
4.用变量savePath记录改名后的文件夹路径(此处通过循环将day的值改变,从而通过当天日期day的值来确定生成文件的日期)比如:E:\TestTest1\2023-04-19
5.如果循环到一个日期的时候,发现该文件夹中不存在这个日期命名的文件,就把当天的文件夹改名复制,否则,就不复制改名生成。
6.复制完成后弹窗提醒
如果需要生成确定日期的文件夹,可使用日期计算器来计算两个日期之间的天数。
具体参考我另外一篇: