這篇文章主要介紹了python實現如何按日期歸檔檔案,幫助大家更好地理解和使用python,感興趣的朋友可以瞭解下
在工作過程中,data目錄會一直接收檔案,收到的檔案放到一個大目錄裡不好判斷是否漏收,也不利於檢索;
所以寫了個指令碼,每天早上九點用Windows計劃執行,將昨日這個資料夾內收到的檔案全部歸檔,歸檔資料夾的名字就是昨天的日期,指令碼及解釋如下:
import os
import datetime
import shutil
# get file name
def get_datetime(i):
d = str((datetime.datetime.now() - datetime.timedelta(days=i)).date()).split("-")
timeoffile = d[0] + d[1] + d[2]
return(timeoffile)
# new file
def get_newfile(i):
filename = get_datetime(i)
aimPath = 'C:\\data\\' + filename
isExists=os.path.exists(aimPath)
if not isExists:
os.makedirs(aimPath)
print(aimPath + 'ok!')
return aimPath
else:
print(aimPath + 'file is exists!')
return False
def delete_flie(filePath):
for i,j,k in os.walk(filePath):
n = 0
while n < len(k):
fileneed = filePath + '\\' + k[n]
if(os.path.exists(fileneed)):
os.remove(fileneed)
else:
pass
n = n + 1
# get file name and move
def get_filename(filePath):
for i,j,k in os.walk(filePath):
n = 0
while n < len(k):
fileneed = filePath + '\\' + k[n]
if(os.path.exists(fileneed)):
shutil.move(fileneed,aimPath)
else:
pass
n = n + 1
# Monday special
def is_Monday():
if datetime.datetime.now().weekday() == 0:
return 3
else:
return 1
filePath = 'C:\\data'
pos = is_Monday()
aimPath = get_newfile(pos)
get_filename(filePath)
delete_flie(filePath)
1.get_newfile該函式呼叫get_datetime函式,獲得指定日期,並按照YYYYMMDD的格式將日期拼接;
使用isExists,來對檔名是否存在進行校驗,如果該資料夾不存在,則新建資料夾。
3.get_filename獲取date資料夾內的檔名,並將其移動到新資料夾內;
在移動前要使用os.path.exists驗證待移動檔案是否存在。
4.is_Monday週一的時候需要將週五、週六、週日的檔案都放在以週五日期命名的資料夾中,所以使用這個函式來判斷是星期幾;
datetime.datetime.now().weekday()函式是0-6來表示週一-週五,所以值為0的時候,返回3;
這個函式的值將傳給get_newfile,再呼叫get_datetime函式,透過控制這段的i,來控制生成的日期時間:
d = str((datetime.datetime.now() - datetime.timedelta(days=i)).date()).split("-")
注:shutil.copy會改變檔案生成時間,不好對檔案進行判斷,所以要使用shutil.move移動檔案