2016-11-08 60 views
0

我正在編寫一個程序,它以YYYY-MM-DD日期爲名刪除目錄。我堅持爲此寫一個方法,它創建了一個要刪除的文件夾的路徑名列表。將它們添加到此列表的標準是文件夾名稱中日期的年齡。在python中查找字符串中較舊的日期3

我無法使程序識別這些較舊的日期。

import os 
import sys 
import datetime 
import config #this is by me 

global archivePath # config value: "/archive/" 
global archiveForDays # config value: 14 

archivePath = config.archivePath 
archiveForDays = config.archiveForDays 

def getDestruDirList(): 
    # This method creates a list of files for deletion. 

    archiveList = os.listdir(archivePath) #get list of archive directorires 
    deletionList = []      #create list for deletion 

    for dateStr in archiveList: 
     skip = False 
     if (not dateStr == "current"): 
      dateVar = datetime.datetime.strptime(dateStr, "%Y-%m-%d") 
      if dateVar.date < datetime.datetime.now() - datetime.timedelta(days=archiveForDays): 
       deletionList.append(archivePath + dateStr) #add full pathname to deletion list 
       print("Revision " + dateVar.strftime("%d-%m-%Y") + " to be deleted.") 

    return deletionList 

測試這是行不通的,我對日期不是很熟悉,以前從未見過這個錯誤。在該方法測試失敗如下...

Python 3.4.3 (default, Sep 9 2016, 06:04:18) 
[GCC 4.9.3] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import cleaner 
>>> cleaner.getDestruDirList() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/root/archive-scripts/cleaner.py", line 22, in getDestruDirList 
    if dateVar.date < datetime.datetime.now() - datetime.timedelta(days=archiveForDays): 
TypeError: unorderable types: builtin_function_or_method() < datetime.datetime() 

編輯:我比較肯定的類型錯誤問題,但我不知道該怎麼辦了,和上午被卡住。

+0

'如果dateVar.date

+0

是'''dateVar.date'''一個方法/函數/可調用?它應該是'''dateVar.date()'''?或者可能只是使用'''''''''''''''''' – wwii

回答

0

問題是導致使用錯誤類型的一些語法錯誤。在某個時候研究一個解決方案,我可能會犯這個看Python2例子的錯誤。這是一個完成了單元測試的方法,它產生一個以超過特定天數的日期命名的目錄列表。

def getDestruDirList(): 
    # This method creates a list of files for deletion. 

    archiveList = os.listdir(archivePath) #get list of archive directorires 
    deletionList = []      #create list for deletion 

    for dateStr in archiveList: 
     skip = False 
     if (not dateStr == "current"): 
      dateVar = datetime.datetime.strptime(dateStr, "%Y-%m-%d") 
      if dateVar.date() < datetime.datetime.now().date() - datetime.timedelta(days=archiveForDays): 
       deletionList.append(archivePath + dateStr) #add full pathname to deletion list 
       print("Revision " + dateVar.strftime("%d-%m-%Y") + " to be deleted.") 

    return deletionList