python-自动化篇-办公-批量新建文件夹并保存日志信息

news2025/4/20 4:26:40

文章目录

  • 说明
  • 代码
  • 效果

说明

因为业务需要,每天都需要按当天的日期创建很多新文件夹。把这种重复又繁重的操作交给Python来做,一直是我的目标。先说下要求:

  1. 默认在桌面新建文件夹。
  2. 文件夹命名方式,“月.日-1”,比如7.8-1,7.8-2。7是代表当天的月份,不能显示07。8是代表当天的日期,不能显示08。-1,-2…是文件夹的序号。
  3. 序号支持手动输入,比方可以自己输入10就创建10个文件夹。要有记忆功能,这次输入10以后,下次运行程序就默认是10。

再说下思路及步骤:

  1. 使用Tkinter创建操作界面,需要有文件及路径文本框和选择按钮;文件夹数量输入框及执行新建按钮;显示操作执行过程的列表框。
  2. 获取当天的月份和日期。
  3. 按需求的数量创建新文件夹。
  4. 将最近输入的文件夹数量保存到log.txt文件,下次运行程序直接从log.txt取数,实现记忆功能。
    使用Tkinter创建界面。下面来看看如何获取当天的月份和日期,并整理成想要的格式。定义了一个函数get_current_date,然后将日期转换成本地时间,再分别获取月份和天数,并转为整数,这样“07”才能变成“7”。最后将月和天用“.”连起来,就得到了最终结果。比如今天,结果就显示为"7.9"。
#获取当天的月份和日期,整理成想要的格式
from time import time, localtime ,strftime
def get_current_date():
    time_stamp = time()  # 当前时间的时间戳
    local_time = localtime(time_stamp)  #转为本地时间
    str_time_month = int(strftime('%m', local_time))#获取月份并转为整数
    str_time_day = int(strftime('%d', local_time))#获取天数并转为整数
    return str(str_time_month)+"."+str(str_time_day)#整理格式
get_current_date()

然后写创建新文件夹的函数create_folders,其中传入两个参数,即以上处理好的日期date和文件夹数量qty。用for循环根据数量来创建。先将文件夹的名称字符串按需要连接好,存入变量folder。然后用if语句判断此目录是否存在,若不存在,才使用os.makedirs创建,若存在,则输出“目录已存在”的提示。调用函数实验了一下,没问题。

#创建新文件夹
import os
def create_folders(date,qty):
    for i in range(1,qty+1):
        folder = 'D:\\' + date + '-' + str(i)
        # 判断是否已经存在该目录
        if not os.path.exists(folder):
            # 目录不存在,进行创建操作
            os.makedirs(folder) #使用os.makedirs()方法创建多层目录
            print("目录新建成功:" + folder) 
        else:
            print("目录已存在!")
                
date = get_current_date()
qty = 3
create_folders(date,qty)

下面定义一个函数save_recent_folder_qty,用于将最近使用过的“文件夹数量”保存到日志文件log.txt。先设定好文件的路径及文件名,存入变量log_file,然后使用写入模式w打开文件,将数量qty写入。写好后,调用一下,就可以在指定的路径下看到这个文件了,打开可见里面的内容为“10”。

def save_recent_folder_qty(qty):
    '''保存最近的文件夹数量'''
    log_file = os.getcwd() + "\\log.txt"
    with open(log_file, "w") as f:
        recent_qty = str(qty)
        f.write(recent_qty) 
save_recent_folder_qty(10)

然后还需要从上面保存的日志文件中提取最近用过的“文件夹数量”,还是定义一个函数get_folder_qty,指定路径存入log_file变量。首次运行程序的时候,这个日志文件还没有的。所以为避免报错,先用if语句判断是否存在。若已存在,则直接读取到qty变量中,并返回;如不存在,则返回“0”。写好后,也可以调用一下,看看是否有问题。

def get_folder_qty():
    log_file = os.getcwd() + "\\log.txt"
    if os.path.exists(log_file):
        with open(log_file, "r") as f:
            qty = f.readline()
            return int(qty)
    else:
        return 0
a = get_folder_qty()
print(a)

以上准备工作做好后,就可以整合到类MainGUI中去了。这个整合,基本上跟实例63(https://zhuanlan.zhihu.com/p/151754669) 差不多,下面挑有差异的部分进行说明。首先,增加了两个标签self.label_1self.label_2,用于提示文本框中显示的内容,分别是“目标目录”和“文件件数量”。还有,就是给文本框增加了默认显示的内容。其中StringVar用于跟踪字符串变量,方便将其值显示在界面上。将要要显示的内容经StringVar处理,传给变量addr,然后赋给Entry中的textvariable参数,就可以在文本框显示了。同样,日志文件log.txt中读取最近使用过的文件夹数量也是这样显示在文本框。
最后,将函数跟界面的按钮,文本框,列表框连接起来,就可以开始运行了。

import os
from datetime import datetime
from time import time, localtime ,strftime
from tkinter import Tk,Entry,Button,Listbox,X,Y,END,Scrollbar,RIGHT,BOTTOM,HORIZONTAL,StringVar,Label
from tkinter.filedialog import askdirectory

class MainGUI():
    def __init__(self):
        myWindow = Tk()
        myWindow.title("批量新建文件夹")
        #设置窗口大小
        myWindow.geometry('590x400')
        #增加标签
        self.label_1 = Label(myWindow, text=' 目标目录:')
        self.label_1.place(x=10, y=10,width=70, height=30)
        self.label_2 = Label(myWindow, text='文件夹数量:')
        self.label_2.place(x=10, y=50,width=70, height=30)

        #增加文本框
        addr = StringVar(value='C:\\Users\\xxxx\\Desktop') #文本框默认显示的内容
        self.input_entry = Entry(myWindow, highlightcolor='red', highlightthickness=1, textvariable=addr)
        self.input_entry.place(x=80, y=10,width=410, height=30)
        self.btn_in = Button(myWindow, text='选择目录',command = self.select_dir1, width=10, height=1) 
        self.btn_in.place(x=500,y=10)
        
        folder_quantity = str(self.get_folder_qty()) #从日志文件`log.txt`中读取最近使用过的文件夹数量
        def_qty = StringVar(value = folder_quantity)
        self.folderQty_entry = Entry(myWindow, highlightcolor='blue', highlightthickness=1, textvariable=def_qty)
        self.folderQty_entry.place(x=80, y=50,width=410, height=30)
        self.btn_exe = Button(myWindow, text='执行新建',command = self.create_folders, width=10, height=1)
        self.btn_exe.place(x=500,y=50)
        
        #增加列表框
        self.result_show = Listbox(myWindow,bg='Azure') 
        self.result_show.place(x=10,y=100, width=570, height=290)
        self.sbY = Scrollbar(self.result_show,command=self.result_show.yview)#在列表框中增加Y轴滚动条
        self.sbY.pack(side=RIGHT,fill=Y)
        self.result_show.config(yscrollcommand = self.sbY.set)
        self.sbX = Scrollbar(self.result_show,command=self.result_show.xview,orient = HORIZONTAL)#在列表框中增加X轴滚动条
        self.sbX.pack(side=BOTTOM,fill=X)
        self.result_show.config(xscrollcommand = self.sbX.set)
        
        myWindow.mainloop()
        
    def select_dir1(self):
        self.input_entry.delete(0, END)
        self.input_entry.insert(0, askdirectory(initialdir= "D:\\"))
        
    def create_folders(self):
        date = self.get_current_date() #获取日期
        qty = int(self.folderQty_entry.get()) #获取文本框中文件夹数量,并转为整数
        for i in range(1,qty+1):
            folder = self.input_entry.get() + "\\" + date + '-' + str(i)
            # 判断是否已经存在该目录
            if not os.path.exists(folder):
                # 目录不存在,进行创建操作
                os.makedirs(folder) #使用os.makedirs()方法创建目录
                f = f"目录新建成功:{folder}" # 创建一个显示项
                self.result_show.insert("end", f) #将结果添加到列表框中
            else:
                f = f"目录已存在:{folder}" # 创建一个显示项
                self.result_show.insert("end", f) #将结果添加到列表框中
        f = "-"*100 #创建分割线
        self.result_show.insert("end", f) # 将分割线添加到列表框
        f = f"程序运行完成,请关闭窗口退出."# 创建一个显示项
        self.result_show.insert("end", f) # 将结果添加到列表框
        f = " "*100
        self.result_show.insert("end", f) # 将以上空格添加到列表框
        self.save_recent_folder_qty() #保存最新的文件夹数量
        
    def get_current_date(self):
        time_stamp = time()  
        local_time = localtime(time_stamp)  
        str_time_month = int(strftime('%m', local_time))
        str_time_day = int(strftime('%d', local_time))
        return str(str_time_month)+"."+str(str_time_day)
    
    def get_folder_qty(self):
        '''从log.txt文件中获取最近的文件夹数量,若没有则返回0'''
        log_file = os.getcwd() + "\\log.txt"
        if os.path.exists(log_file):
            with open(log_file, "r") as f:
                qty = f.readline()
                return int(qty)
        else:
            return 0
        
    def save_recent_folder_qty(self):
        '''保存最近的文件夹数量'''
        log_file = os.getcwd() + "\\log.txt"
        with open(log_file, "w") as f:
            recent_qty = str(self.folderQty_entry.get())
            f.write(recent_qty) 
            
if __name__ == "__main__":
    MainGUI()

首次运行,弹出窗口如下。可见“目标目录”是我们设定好的默认显示值。因为第一次运行,还没有日志文件log.txt,所以“文件夹数量”是我们设定好的默认值“0”。
在这里插入图片描述

选择好“目标目录”,并设定好“文件夹数量”后,点击“执行新建”,需要的文件夹秒秒钟建好。日志文件也将输入的“文件夹数量”自动保存下来了。
在这里插入图片描述

代码

import os
from datetime import datetime
from time import time, localtime ,strftime
from tkinter import Tk,Entry,Button,Listbox,X,Y,END,Scrollbar,RIGHT,BOTTOM,HORIZONTAL,StringVar,Label
from tkinter.filedialog import askdirectory

class MainGUI():
    def __init__(self):
        myWindow = Tk()
        myWindow.title("批量新建文件夹")
        #设置窗口大小
        myWindow.geometry('590x400')
        #增加标签
        self.label_1 = Label(myWindow, text=' 目标目录:')
        self.label_1.place(x=10, y=10,width=70, height=30)
        self.label_2 = Label(myWindow, text='文件夹数量:')
        self.label_2.place(x=10, y=50,width=70, height=30)

        #增加文本框
        addr = StringVar(value='C:\\Users\\xxxx\\Desktop') #文本框默认显示的内容
        self.input_entry = Entry(myWindow, highlightcolor='red', highlightthickness=1, textvariable=addr)
        self.input_entry.place(x=80, y=10,width=410, height=30)
        self.btn_in = Button(myWindow, text='选择目录',command = self.select_dir1, width=10, height=1) 
        self.btn_in.place(x=500,y=10)
        
        folder_quantity = str(self.get_folder_qty()) #从日志文件`log.txt`中读取最近使用过的文件夹数量
        def_qty = StringVar(value = folder_quantity)
        self.folderQty_entry = Entry(myWindow, highlightcolor='blue', highlightthickness=1, textvariable=def_qty)
        self.folderQty_entry.place(x=80, y=50,width=410, height=30)
        self.btn_exe = Button(myWindow, text='执行新建',command = self.create_folders, width=10, height=1)
        self.btn_exe.place(x=500,y=50)
        
        #增加列表框
        self.result_show = Listbox(myWindow,bg='Azure') 
        self.result_show.place(x=10,y=100, width=570, height=290)
        self.sbY = Scrollbar(self.result_show,command=self.result_show.yview)#在列表框中增加Y轴滚动条
        self.sbY.pack(side=RIGHT,fill=Y)
        self.result_show.config(yscrollcommand = self.sbY.set)
        self.sbX = Scrollbar(self.result_show,command=self.result_show.xview,orient = HORIZONTAL)#在列表框中增加X轴滚动条
        self.sbX.pack(side=BOTTOM,fill=X)
        self.result_show.config(xscrollcommand = self.sbX.set)
        
        myWindow.mainloop()
        
    def select_dir1(self):
        self.input_entry.delete(0, END)
        self.input_entry.insert(0, askdirectory(initialdir= "D:\\"))
        
    def create_folders(self):
        date = self.get_current_date() #获取日期
        qty = int(self.folderQty_entry.get()) #获取文本框中文件夹数量,并转为整数
        for i in range(1,qty+1):
            folder = self.input_entry.get() + "\\" + date + '-' + str(i)
            # 判断是否已经存在该目录
            if not os.path.exists(folder):
                # 目录不存在,进行创建操作
                os.makedirs(folder) #使用os.makedirs()方法创建目录
                f = f"目录新建成功:{folder}" # 创建一个显示项
                self.result_show.insert("end", f) #将结果添加到列表框中
            else:
                f = f"目录已存在:{folder}" # 创建一个显示项
                self.result_show.insert("end", f) #将结果添加到列表框中
        f = "-"*100 #创建分割线
        self.result_show.insert("end", f) # 将分割线添加到列表框
        f = f"程序运行完成,请关闭窗口退出."# 创建一个显示项
        self.result_show.insert("end", f) # 将结果添加到列表框
        f = " "*100
        self.result_show.insert("end", f) # 将以上空格添加到列表框
        self.save_recent_folder_qty() #保存最新的文件夹数量
        
    def get_current_date(self):
        time_stamp = time()  
        local_time = localtime(time_stamp)  
        str_time_month = int(strftime('%m', local_time))
        str_time_day = int(strftime('%d', local_time))
        return str(str_time_month)+"."+str(str_time_day)
    
    def get_folder_qty(self):
        '''从log.txt文件中获取最近的文件夹数量,若没有则返回0'''
        log_file = os.getcwd() + "\\log.txt"
        if os.path.exists(log_file):
            with open(log_file, "r") as f:
                qty = f.readline()
                return int(qty)
        else:
            return 0
        
    def save_recent_folder_qty(self):
        '''保存最近的文件夹数量'''
        log_file = os.getcwd() + "\\log.txt"
        with open(log_file, "w") as f:
            recent_qty = str(self.folderQty_entry.get())
            f.write(recent_qty) 
            
if __name__ == "__main__":
    MainGUI()

效果

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1446685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同一个春晚 ,同一个淘宝

配图来自Canva可画 在全国一片喜庆的氛围中,龙年春晚如约播出,又一次为淘宝商家打开“财富之门”。 春晚作为春节不可或缺的一部分,它在传承传统文化的同时,也在引领当代网络潮流。龙年春晚开始前,不少网友“押题”&…

Stable Diffusion教程——stable diffusion基础原理详解与安装秋叶整合包进行出图测试

前言 在2022年,人工智能创作内容(AIGC)成为了AI领域的热门话题之一。在ChatGPT问世之前,AI绘画以其独特的创意和便捷的创作工具迅速走红,引起了广泛关注。随着一系列以Stable Diffusion、Midjourney、NovelAI等为代表…

车载诊断协议DoIP系列 —— OSI模型DoIP参考

车载诊断协议DoIP系列 —— OSI模型DoIP参考 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再…

【玩转408数据结构】线性表——线性表的顺序表示(顺序表)

知识回顾 通过前文,我们了解到线性表是具有相同数据类型的有限个数据元素序列;并且,线性表只是一种逻辑结构,其不同存储形式所展现出的也略有不同,那么今天我们来了解一下线性表的顺序存储——顺序表。 顺序表的定义 …

2024春晚纸牌魔术原理----环形链表的约瑟夫问题

一.题目及剖析 https://www.nowcoder.com/practice/41c399fdb6004b31a6cbb047c641ed8a?tabnote 这道题涉及到数学原理,有一般公式,但我们先不用公式,看看如何用链表模拟出这一过程 二.思路引入 思路很简单,就试创建一个单向循环链表,然后模拟报数,删去对应的节点 三.代码引…

Stable Diffusion 模型下载:DreamShaper XL(梦想塑造者 XL)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 DreamShaper 是一个分格多样的大模型,可以生成写实、原画、2.5D 等…

前端工程化面试题 | 07.精选前端工程化高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

springboot183基于java的公寓报修管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

AES加密后的密码可以破解吗

AES(高级加密标准)是一种广泛使用的对称加密算法,设计用来抵御各种已知的攻击方法。AES使用固定块大小的加密块和密钥长度,通常是128、192或256位。它被认为是非常安全的,到目前为止,没有已知的可行方法能够…

视觉开发板—K210自学笔记(六)

视觉开发板—K210 本期我们继续来遵循其他控制器的学习路线,在学习完GPIO的基本操作后,我们来学一个非常重要的UART串口通信。为什么说这个重要呢,通常来说我们在做一个稍微复杂的项目的时候K210作为主控的核心可能还有所欠缺,另…

基于微信小程序的校园失物招领小程序

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

统一数据格式返回,统一异常处理

目录 1.统一数据格式返回 2.统一异常处理 3.接口返回String类型问题 1.统一数据格式返回 添加ControllerAdvice注解实现ResponseBodyAdvice接口重写supports方法,beforeBodyWrite方法 /*** 统一数据格式返回的保底类 对于一些非对象的数据的再统一 即非对象的封…

【开源】SpringBoot框架开发数字化社区网格管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、开发背景四、系统展示五、核心源码5.1 查询企事业单位5.2 查询流动人口5.3 查询精准扶贫5.4 查询案件5.5 查询人口 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数字化社区网格管理系统&#xf…

【Linux进阶之路】网络——“?“(上)

文章目录 一、历史发展1. 独立形态2. 互联形态3. 局域网 二、网络协议1.OSI七层协议2.TCP/IP四(五)层模型 三、网络通信1.封装与解包2.数据的传输1.局域网2.广域网 总结尾序 本篇文章的目的是带大家初步认识网络,为后面的网络编程打下基础&am…

three.js 细一万倍教程 从入门到精通(二)

目录 三、全面认识three.js物体 3.1、掌握几何体顶点_UV_法向属性 3.2、BufferGeometry设置顶点创建矩形 3.3、生成酷炫三角形科技物体 四、详解材质与纹理 4.1、初识材质与纹理 4.2、详解纹理偏移_旋转_重复 偏移 旋转 重复 4.3、设置纹理显示算法与mipmap mapFil…

第二篇【传奇开心果微博系列】Python微项目技术点案例示例:成语接龙游戏

传奇开心果微博系列 系列微博目录Python微项目技术点案例示例系列 微博目录一、微项目目标二、雏形示例代码三、扩展整体思路四、玩家输入示例代码五、成语判断示例代码六、回答判断示例代码七、电脑判断示例代码八、游戏结束示例代码九、界面优化示例代码十、扩展成语库示例代…

给你介绍一款适合教培行业的手机软件,很好用,关键还是免费的

给你介绍一款适合教培行业的手机软件,很好用,关键还是免费的,DT浏览器不同于普通意义上的浏览器,DT的含义就是数据资料的意思,更专注于资料的收集和管理,是一款资料管理类的浏览器,也是一款面向…

【好玩AI】【Prompt】情人节了,用GPT写个【骂醒恋爱脑】的机器人跟自己对话吧

情人节了,让我们用GPT写个【骂醒恋爱脑】的机器人跟自己对话吧。 通过本文,你能学到: 1. 如何零代码搭建一个自己的机器人Bot 2. 骂醒恋爱脑的高级Prompt 通过本文,你还能得到: 恋爱脑可能被骂醒 为了白嫖,…

从计算机恢复已删除文件的 6 种方法!

如果您的重要文件之一已从计算机中删除怎么办?如果不小心从硬盘中删除了文件怎么办? 如今的公司通常将重要数据存储在云或硬盘中。但最重要的是,您必须考虑这样一个事实:您可能会丢失计算机上的数据。数据丢失的原因有多种&#x…

校招扫盲篇:写一份让HR过目不忘的简历

嵌入式简历怎么写 一、简历构成二、各部分写法的主要事项1.个人的基本信息2.教育背景3.专业技能4.实习经历5.项目经历6.荣誉经历7.校园经历8.自我评价 Last but not least 一、简历构成 首先我们要清楚写一份简历有哪些部分组成。按内容来分的话可以分为个人信息、教育背景、专…