說明
因?yàn)闃I(yè)務(wù)需要,每天都需要按當(dāng)天的日期創(chuàng)建很多新文件夾。把這種重復(fù)又繁重的操作交給Python來做,一直是我的目標(biāo)。先說下要求:
- 默認(rèn)在桌面新建文件夾。
- 文件夾命名方式,“月.日-1”,比如7.8-1,7.8-2。7是代表當(dāng)天的月份,不能顯示07。8是代表當(dāng)天的日期,不能顯示08。-1,-2…是文件夾的序號(hào)。
- 序號(hào)支持手動(dòng)輸入,比方可以自己輸入10就創(chuàng)建10個(gè)文件夾。要有記憶功能,這次輸入10以后,下次運(yùn)行程序就默認(rèn)是10。
再說下思路及步驟:
- 使用Tkinter創(chuàng)建操作界面,需要有文件及路徑文本框和選擇按鈕;文件夾數(shù)量輸入框及執(zhí)行新建按鈕;顯示操作執(zhí)行過程的列表框。
- 獲取當(dāng)天的月份和日期。
- 按需求的數(shù)量創(chuàng)建新文件夾。
- 將最近輸入的文件夾數(shù)量保存到log.txt文件,下次運(yùn)行程序直接從log.txt取數(shù),實(shí)現(xiàn)記憶功能。
使用Tkinter創(chuàng)建界面。下面來看看如何獲取當(dāng)天的月份和日期,并整理成想要的格式。定義了一個(gè)函數(shù)get_current_date
,然后將日期轉(zhuǎn)換成本地時(shí)間,再分別獲取月份和天數(shù),并轉(zhuǎn)為整數(shù),這樣“07”才能變成“7”。最后將月和天用“.”連起來,就得到了最終結(jié)果。比如今天,結(jié)果就顯示為"7.9"。
#獲取當(dāng)天的月份和日期,整理成想要的格式
from time import time, localtime ,strftime
def get_current_date():
time_stamp = time() # 當(dāng)前時(shí)間的時(shí)間戳
local_time = localtime(time_stamp) #轉(zhuǎn)為本地時(shí)間
str_time_month = int(strftime('%m', local_time))#獲取月份并轉(zhuǎn)為整數(shù)
str_time_day = int(strftime('%d', local_time))#獲取天數(shù)并轉(zhuǎn)為整數(shù)
return str(str_time_month)+"."+str(str_time_day)#整理格式
get_current_date()
然后寫創(chuàng)建新文件夾的函數(shù)create_folders
,其中傳入兩個(gè)參數(shù),即以上處理好的日期date
和文件夾數(shù)量qty
。用for
循環(huán)根據(jù)數(shù)量來創(chuàng)建。先將文件夾的名稱字符串按需要連接好,存入變量folder
。然后用if
語句判斷此目錄是否存在,若不存在,才使用os.makedirs
創(chuàng)建,若存在,則輸出“目錄已存在”的提示。調(diào)用函數(shù)實(shí)驗(yàn)了一下,沒問題。
#創(chuàng)建新文件夾
import os
def create_folders(date,qty):
for i in range(1,qty+1):
folder = 'D:\\' + date + '-' + str(i)
# 判斷是否已經(jīng)存在該目錄
if not os.path.exists(folder):
# 目錄不存在,進(jìn)行創(chuàng)建操作
os.makedirs(folder) #使用os.makedirs()方法創(chuàng)建多層目錄
print("目錄新建成功:" + folder)
else:
print("目錄已存在!")
date = get_current_date()
qty = 3
create_folders(date,qty)
下面定義一個(gè)函數(shù)save_recent_folder_qty
,用于將最近使用過的“文件夾數(shù)量”保存到日志文件log.txt
。先設(shè)定好文件的路徑及文件名,存入變量log_file
,然后使用寫入模式w
打開文件,將數(shù)量qty
寫入。寫好后,調(diào)用一下,就可以在指定的路徑下看到這個(gè)文件了,打開可見里面的內(nèi)容為“10”。
def save_recent_folder_qty(qty):
'''保存最近的文件夾數(shù)量'''
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)
然后還需要從上面保存的日志文件中提取最近用過的“文件夾數(shù)量”,還是定義一個(gè)函數(shù)get_folder_qty
,指定路徑存入log_file
變量。首次運(yùn)行程序的時(shí)候,這個(gè)日志文件還沒有的。所以為避免報(bào)錯(cuò),先用if
語句判斷是否存在。若已存在,則直接讀取到qty
變量中,并返回;如不存在,則返回“0”。寫好后,也可以調(diào)用一下,看看是否有問題。
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)
以上準(zhǔn)備工作做好后,就可以整合到類MainGUI
中去了。這個(gè)整合,基本上跟實(shí)例63(https://zhuanlan.zhihu.com/p/151754669) 差不多,下面挑有差異的部分進(jìn)行說明。首先,增加了兩個(gè)標(biāo)簽self.label_1
和self.label_2
,用于提示文本框中顯示的內(nèi)容,分別是“目標(biāo)目錄”和“文件件數(shù)量”。還有,就是給文本框增加了默認(rèn)顯示的內(nèi)容。其中StringVar
用于跟蹤字符串變量,方便將其值顯示在界面上。將要要顯示的內(nèi)容經(jīng)StringVar
處理,傳給變量addr
,然后賦給Entry
中的textvariable
參數(shù),就可以在文本框顯示了。同樣,日志文件log.txt
中讀取最近使用過的文件夾數(shù)量也是這樣顯示在文本框。
最后,將函數(shù)跟界面的按鈕,文本框,列表框連接起來,就可以開始運(yùn)行了。
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("批量新建文件夾")
#設(shè)置窗口大小
myWindow.geometry('590x400')
#增加標(biāo)簽
self.label_1 = Label(myWindow, text=' 目標(biāo)目錄:')
self.label_1.place(x=10, y=10,width=70, height=30)
self.label_2 = Label(myWindow, text='文件夾數(shù)量:')
self.label_2.place(x=10, y=50,width=70, height=30)
#增加文本框
addr = StringVar(value='C:\\Users\\xxxx\\Desktop') #文本框默認(rèn)顯示的內(nèi)容
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`中讀取最近使用過的文件夾數(shù)量
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='執(zhí)行新建',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軸滾動(dòng)條
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軸滾動(dòng)條
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()) #獲取文本框中文件夾數(shù)量,并轉(zhuǎn)為整數(shù)
for i in range(1,qty+1):
folder = self.input_entry.get() + "\\" + date + '-' + str(i)
# 判斷是否已經(jīng)存在該目錄
if not os.path.exists(folder):
# 目錄不存在,進(jìn)行創(chuàng)建操作
os.makedirs(folder) #使用os.makedirs()方法創(chuàng)建目錄
f = f"目錄新建成功:{folder}" # 創(chuàng)建一個(gè)顯示項(xiàng)
self.result_show.insert("end", f) #將結(jié)果添加到列表框中
else:
f = f"目錄已存在:{folder}" # 創(chuàng)建一個(gè)顯示項(xiàng)
self.result_show.insert("end", f) #將結(jié)果添加到列表框中
f = "-"*100 #創(chuàng)建分割線
self.result_show.insert("end", f) # 將分割線添加到列表框
f = f"程序運(yùn)行完成,請(qǐng)關(guān)閉窗口退出."# 創(chuàng)建一個(gè)顯示項(xiàng)
self.result_show.insert("end", f) # 將結(jié)果添加到列表框
f = " "*100
self.result_show.insert("end", f) # 將以上空格添加到列表框
self.save_recent_folder_qty() #保存最新的文件夾數(shù)量
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文件中獲取最近的文件夾數(shù)量,若沒有則返回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):
'''保存最近的文件夾數(shù)量'''
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()
首次運(yùn)行,彈出窗口如下??梢姟澳繕?biāo)目錄”是我們?cè)O(shè)定好的默認(rèn)顯示值。因?yàn)榈谝淮芜\(yùn)行,還沒有日志文件log.txt
,所以“文件夾數(shù)量”是我們?cè)O(shè)定好的默認(rèn)值“0”。
選擇好“目標(biāo)目錄”,并設(shè)定好“文件夾數(shù)量”后,點(diǎn)擊“執(zhí)行新建”,需要的文件夾秒秒鐘建好。日志文件也將輸入的“文件夾數(shù)量”自動(dòng)保存下來了。文章來源:http://www.zghlxwxcb.cn/news/detail-829758.html
代碼
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("批量新建文件夾")
#設(shè)置窗口大小
myWindow.geometry('590x400')
#增加標(biāo)簽
self.label_1 = Label(myWindow, text=' 目標(biāo)目錄:')
self.label_1.place(x=10, y=10,width=70, height=30)
self.label_2 = Label(myWindow, text='文件夾數(shù)量:')
self.label_2.place(x=10, y=50,width=70, height=30)
#增加文本框
addr = StringVar(value='C:\\Users\\xxxx\\Desktop') #文本框默認(rèn)顯示的內(nèi)容
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`中讀取最近使用過的文件夾數(shù)量
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='執(zhí)行新建',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軸滾動(dòng)條
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軸滾動(dòng)條
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()) #獲取文本框中文件夾數(shù)量,并轉(zhuǎn)為整數(shù)
for i in range(1,qty+1):
folder = self.input_entry.get() + "\\" + date + '-' + str(i)
# 判斷是否已經(jīng)存在該目錄
if not os.path.exists(folder):
# 目錄不存在,進(jìn)行創(chuàng)建操作
os.makedirs(folder) #使用os.makedirs()方法創(chuàng)建目錄
f = f"目錄新建成功:{folder}" # 創(chuàng)建一個(gè)顯示項(xiàng)
self.result_show.insert("end", f) #將結(jié)果添加到列表框中
else:
f = f"目錄已存在:{folder}" # 創(chuàng)建一個(gè)顯示項(xiàng)
self.result_show.insert("end", f) #將結(jié)果添加到列表框中
f = "-"*100 #創(chuàng)建分割線
self.result_show.insert("end", f) # 將分割線添加到列表框
f = f"程序運(yùn)行完成,請(qǐng)關(guān)閉窗口退出."# 創(chuàng)建一個(gè)顯示項(xiàng)
self.result_show.insert("end", f) # 將結(jié)果添加到列表框
f = " "*100
self.result_show.insert("end", f) # 將以上空格添加到列表框
self.save_recent_folder_qty() #保存最新的文件夾數(shù)量
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文件中獲取最近的文件夾數(shù)量,若沒有則返回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):
'''保存最近的文件夾數(shù)量'''
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.zghlxwxcb.cn/news/detail-829758.html
到了這里,關(guān)于python-自動(dòng)化篇-辦公-批量新建文件夾并保存日志信息的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!