You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:25:28