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

文章目录

  • 说明
  • 代码
  • 效果

说明

因为业务需要,每天都需要按当天的日期创建很多新文件夹。把这种重复又繁重的操作交给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 askdirectoryclass 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 = " "*100self.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 0def 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 askdirectoryclass 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 = " "*100self.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 0def 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.mzph.cn/news/688108.shtml

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

相关文章

transformer 最简单学习1 输入层embeddings layer

词向量的生成可以通过嵌入层(Embedding Layer)来完成。嵌入层是神经网络中的一种常用层,用于将离散的词索引转换为密集的词向量。以下是一个典型的步骤: 建立词表:首先,需要从训练数据中收集所有的词汇&…

Instagram 账号被封如何申诉?ins账号解封经验分享

不知道各位在玩转海外社媒平台时有没有遇到过Instagram账号异常的情况,比如会出现账号受限、帖子发不出去、账号被封号等情况?Instagram账号如果被封不用马上弃用,我们可以先尝试一下申诉,看看能不能把账号解封。所以今天将会出一篇Instagra…

开工大吉!秀一下我们假期の战绩

开工大吉,新年新气象 首先祝大家开工大吉,新年新气象。 祝我的粉丝股东们都能:顺利上岸,升职加薪,日进斗金! 开工就要冲冲冲! 春节假期我是好好放松了,在努力克制自己不要像之前…

VSCODE上使用python_Django

接上篇 https://blog.csdn.net/weixin_44741835/article/details/136135996?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136135996%22%2C%22source%22%3A%22weixin_44741835%22%7D VSCODE官网: Editing Python …

My desktop didn‘t come with the Bluetooth.

You didnt turn on the Bluetooth on PC and phone.Turn on it to control your phone. My desktop didnt come with the Bluetooth. 电脑控制手机的时候,电脑蓝牙没打开 电脑蓝牙打开步骤 电脑蓝牙的小图标打开了 手机上可以看到计算机了【Thinkpad-T440p-zwf】 无…

Java面向对象案例之设计用户去ATM机存款取款(三)

需求及思路分析 业务代码需求: 某公司要开发“银行管理系统”,请使用面向对象的思想,设计银行的储户信息,描述存款、取款业务。 储户类的思路分析: 属性:用户姓名、密码、身份证号、账号、帐户余额 方法&a…

【自然语言处理】实验3,文本情感分析

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现(实验满分),只展示主要任务实验结果,如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题,也欢…

洛谷P5719 分类平均 题解

#题外话&#xff08;第32篇题解&#xff09; #先看题目 题目链接https://www.luogu.com.cn/problem/P5719 #思路&#xff08;注意一下分类计数、i<n这些问题就行&#xff09; #代码 #include <bits/stdc.h> using namespace std; int main() {int n,k,cnt0;double…

第13章 网络 Page741~744 asio核心类 ip::tcp::socket

1. ip::tcp::socket liburl库使用"curl*" 代表socket 句柄 asio库使用ip::tcp::socket类代表TCP协议下的socket对象。 将“句柄”换成“对象”,因为asio库是不打折扣的C库 ip::tcp::socket提供一下常用异步操作都以async开头 表13-3 tcp::socket提供的异步操作 …

[嵌入式系统-28]:开源的虚拟机监视器和仿真器:QEMU(Quick EMUlator)与VirtualBox、VMware Workstation的比较

目录 一、QEMU概述 1.1 QEMU架构 1.2 QEMU概述 1.3 什么时候需要QEMU 1.4 QEMU两种操作模式 1.5 QEMU模拟多种CPU架构 二、QEMU与其他虚拟机的比较 2.1 常见的虚拟化技术 2.1 Linux KVM 2.2 Windows VirtualBox 2.3 Windows VMware workstation 三、VirtualBox、VM…

Vue22 Vue监测数据改变的原理_数组

实例 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>Vue监测数据改变的原理_数组</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js"></script>&…

fish终端下conda activate失败

【问题】fish终端下激活conda环境报错&#xff1a; >> conda activate base CondaError: Run conda init before conda activate ## 然而运行 conda init fish 仍旧无法解决【解决】 参考&#xff1a;https://github.com/conda/conda/issues/11079 方法一&#xf…

2024.02.18作业

1. 使用fgets统计给定文件的行数 #include <stdio.h> #include <stdlib.h> #include <string.h>int main(int argc, char const *argv[]) {if (argc ! 2){puts("input file error");puts("usage:./a.out filename");return -1;}FILE* f…

CSP-201812-1-小明上学

CSP-201812-1-小明上学 解题思路 #include <iostream> using namespace std; int main() {int red, yellow, green, n, timeSum 0;cin >> red >> yellow >> green;cin >> n;for (int i 0; i < n; i){int flag, time;cin >> flag &g…

分享视频二维码如何生成?怎么让其他人扫码查看自己的视频?

现在很多展示性的视频都会通过生成二维码的方式来传播分享&#xff0c;选择二维码的方式来分享能够更加快捷的获取视频内容&#xff0c;让更多人可以同时查看&#xff0c;有效提高视频传播的速度和效率。那么怎么制作视频二维码呢&#xff1f;其实方法很简单&#xff0c;只需要…

lvs DR模式+基于五台服务器部署keepalived + lvs DR模式架构(前端带路由)负载均衡的高可用集群

lvs DR模式基于五台服务器部署keepalived lvs DR模式架构(前端带路由)负载均衡的高可用集群 DR模式一&#xff1a; 客户端&#xff1a;172.20.26.167 LVS服务器&#xff1a;172.20.26.198 后端服务器&#xff1a;172.20.26.218 后端服务器&#xff1a;172.20.26.210 两台…

三勾点餐系统源码,java后台+微信小程序 实现完整的餐厅点餐

三勾点餐系统基于javaspringbootelement-plusuniapp打造的面向开发的小程序商城&#xff0c;方便二次开发或直接使用&#xff0c;可发布到多端&#xff0c;包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。 功能介绍 1.…

【牛客面试必刷TOP101】Day23.BM27 按之字形顺序打印二叉树和BM30 二叉搜索树与双向链表

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;牛客面试必刷TOP101 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&…

在字节划水的7年,太真实了。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 测试这条路是坎坷的&#xff0c;我自己深有体会。 我们的起点低…

力扣题目训练(15)

2024年2月8日力扣题目训练 2024年2月8日力扣题目训练507. 完美数520. 检测大写字母521. 最长特殊序列 Ⅰ221. 最大正方形237. 删除链表中的节点115. 不同的子序列 2024年2月8日力扣题目训练 2024年2月8日第十五天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包括…