2015-09-25 120 views
0

我試圖從修改日期大於3天的文件夾中刪除文件。Python,比較2天,大於3天

numdays = 86400 * 3 # Seconds in a day times 3 days 
from datetime import datetime 
a = datetime.now() 
for delete_f in os.listdir(src1): 
    file_path = os.path.join(src1, delete_f) 
    try: 
     if (a - datetime.fromtimestamp(os.path.getmtime(file_path)) > numdays): 

     os.unlink(file_path) 
except Exception as e: 
    print (e) 

我得到的錯誤 unorderable類型:datetime.timedelta()> int()函數

我真的不知道如何去獲得NUMDAYS一部分,任何人有什麼建議? TIA

回答

2

你想讓numdays成爲一個timedelta對象。

numdays = datetime.timedelta(days=3) 

因此,您現在正在比較兩個日期時間對象。

0

請勿使用datetime.now() - 它會將當前本地時間作爲可能不明確的無用日期時間對象返回。使用time.time()代替:

#!/usr/bin/env python 
import os 
import time 

cutoff = time.time() - 3 * 86400 # 3 days ago 
for filename in os.listdir(some_dir): 
    path = os.path.join(some_dir, filename) 
    try: 
     if os.path.getmtime(path) < cutoff: # too old 
      os.unlink(path) # delete file 
    except EnvironmentError as e: 
     print(e) 

查看爲什麼你不應該在Find if 24 hrs have passed between datetimes - Python


無關使用datetime.now()更多的細節:這裏的pathlib爲基礎的解決方案:

#!/usr/bin/env python3 
import time 
from pathlib import Path 

cutoff = time.time() - 3 * 86400 # 3 days ago 
for path in Path(some_dir).iterdir(): 
    try: 
     if path.lstat().st_mtime < cutoff: #NOTE: don't follow symlinks 
      path.unlink() # delete old files or links 
    except OSError as e: 
     print(e)