Python3脚本检查文件时间戳时出现TypeError的原因求助
错误原因与修复方案
错误根源
触发TypeError的核心问题是误用了datetime类的方法:
你通过from datetime import datetime as dt将datetime类别名为dt,但dt.date()是实例方法,作用是从一个datetime实例中提取日期部分,不能直接传入int类型的年、月、日参数。你写的dt.date(2022,4,30)试图把这个实例方法当成date类的构造器使用,自然会触发类型错误。
修复方案(两种可选)
方案1:导入date类直接创建日期对象
修改导入语句新增date类,直接用date()构造目标日期进行比较:
from datetime import datetime as dt, date # 新增date类导入 import os, send2trash # 移除未使用的timedelta导入 myuser=os.getlogin() # set paths archivePath=rf"C:\Users\{myuser}\Pictures\Saved Pictures\2022.11.zip" logPath=rf"C:\Users\{myuser}\Downloads\screenshots\TEST" # a list of ONLY old files based on 'last modified' time (since Epoch). if os.path.isfile(archivePath): print("Archive already exists, deleting copies in TEST folder.\n") os.chdir(logPath) old=[] for file in sorted(os.listdir(logPath)): modified=dt.fromtimestamp(os.stat(file).st_mtime) # 使用date类构造目标日期 if modified.date() <= date(2022,4,30): old.append(file) else: print(f"{file}: conditions NOT met.") ## mv to trashcan numberFiles=len(old) # 优化单复数显示 print(f"Deleting {numberFiles} file{'s' if numberFiles !=1 else ''}.") for oldFile in old: send2trash.send2trash(oldFile) else: print('No files deleted.')
方案2:不额外导入,用datetime实例提取日期
无需修改导入语句,直接创建datetime实例后提取日期部分进行比较:
from datetime import datetime as dt import os, send2trash # 移除未使用的timedelta导入 myuser=os.getlogin() # set paths archivePath=rf"C:\Users\{myuser}\Pictures\Saved Pictures\2022.11.zip" logPath=rf"C:\Users\{myuser}\Downloads\screenshots\TEST" # a list of ONLY old files based on 'last modified' time (since Epoch). if os.path.isfile(archivePath): print("Archive already exists, deleting copies in TEST folder.\n") os.chdir(logPath) old=[] for file in sorted(os.listdir(logPath)): modified=dt.fromtimestamp(os.stat(file).st_mtime) # 创建datetime实例后提取date部分 if modified.date() <= dt(2022,4,30).date(): old.append(file) else: print(f"{file}: conditions NOT met.") ## mv to trashcan numberFiles=len(old) print(f"Deleting {numberFiles} file{'s' if numberFiles !=1 else ''}.") for oldFile in old: send2trash.send2trash(oldFile) else: print('No files deleted.')
额外优化点
- 移除了未使用的
timedelta导入,减少代码冗余 - 用f-string优化了文件名打印的格式,替代冗余的
str(file) - 修复了删除文件数量的单复数显示问题,让输出更严谨
内容的提问来源于stack exchange,提问作者WobblyWindows
相关产品推荐
相关产品推荐

