2015-09-25 122 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)