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

提取文件名日期生成datetime列表失败:列表始终为空

问题描述

我编写了一段Python代码,读取包含日期的文件名列表(calib_files),拆分字符串提取日期字符串存入calib_dates列表后,尝试通过datetime.strptime()生成datetime对象列表calib_datetimes。但运行后,calib_dates能正常填充,calib_datetimes却始终为空。

代码片段

calib_files = self.optitrack_calibration_listbox.get(0, END)
format = '%Y-%m-%d %H.%M.%S'

calib_datetimes = []
calib_dates = []

for calib in calib_files:
    calib_date = ' '.join(calib.split(' ')[1:3])
    calib_dates.append(calib_date)
    calib_datetimes.append(datetime.strptime(calib_date, format))

print(f'{calib_dates=}')
print(f'{calib_datetimes=}')

运行输出

calib_files=('Cal 2021-10-11 11.35.52 (3DErr 4.949 mm) Poor.cal', 'Cal 2021-10-11 11.44.49 (3DErr 0.285 mm).cal', 'Cal 2021-10-28 09.01.21 (3DErr 0.656 mm) Excellent.cal', 'Cal 2021-11-04 09.54.00 (3DErr 0.336 mm).cal', 'Cal 2021-12-16 10.30.59 (3DErr 0.319 mm).cal', 'Cal 2021-12-16 13.47.08 (3DErr 0.350 mm).cal', 'Cal 2022-01-12 15.50.51 (3DErr 0.302 mm).cal', 'Cal 2022-01-17 16.43.21 (3DErr 0.239 mm).cal', 'Cal 2022-01-19 09.41.54 (3DErr 0.300 mm).cal', 'Cal 2022-01-24 14.52.10 (3DErr 0.352 mm).cal', 'Cal 2022-02-10 09.42.10 (3DErr 0.447 mm).cal', 'Cal 2022-02-17 10.12.50 (3DErr 0.507 mm).cal', 'Cal 2022-02-21 10.19.46 (3DErr 0.390 mm).cal', 'Cal 2022-03-04 10.12.26 (3DErr 0.347 mm).cal', 'Cal 2022-03-07 14.40.24 (3DErr 0.431 mm).cal', 'Cal 2022-03-15 10.33.04 (3DErr 0.365 mm).cal', 'Cal 2022-03-16 10.46.15 (3DErr 0.366 mm).cal', 'Cal 2022-04-11 11.27.07 (3DErr 0.385 mm).cal', 'Cal 2022-04-12 09.17.23 (3DErr 0.355 mm).cal', 'Cal 2022-04-21 15.25.11 (3DErr 0.353 mm).cal', 'Cal 2022-04-26 13.45.35 (3DErr 0.386 mm).cal', 'Cal 2022-05-16 17.21.05 (3DErr 0.397 mm).cal', 'Cal 2022-05-16 18.34.51 (3DErr 0.395 mm).cal', 'Cal 2022-05-23 14.05.07 (3DErr 0.375 mm).cal', 'Cal 2022-06-23 15.27.01 (3DErr 0.456 mm).cal', 'Cal 2022-07-05 14.15.08 (3DErr 1.125 mm) Excellent.cal', 'Cal 2022-07-05 14.18.10 (3DErr 0.487 mm).cal', 'Cal 2022-08-08 11.57.43 (3DErr 1.466 mm) Great.cal', 'Cal 2022-08-08 12.00.56 (3DErr 0.483 mm).cal', 'Cal 2022-08-23 14.11.53 (3DErr 0.457 mm).cal')

calib_dates=['2021-10-11 11.35.52', '2021-10-11 11.44.49', '2021-10-28 09.01.21', '2021-11-04 09.54.00', '2021-12-16 10.30.59', '2021-12-16 13.47.08', '2022-01-12 15.50.51', '2022-01-17 16.43.21', '2022-01-19 09.41.54', '2022-01-24 14.52.10', '2022-02-10 09.42.10', '2022-02-17 10.12.50', '2022-02-21 10.19.46', '2022-03-04 10.12.26', '2022-03-07 14.40.24', '2022-03-15 10.33.04', '2022-03-16 10.46.15', '2022-04-11 11.27.07', '2022-04-12 09.17.23', '2022-04-21 15.25.11', '2022-04-26 13.45.35', '2022-05-16 17.21.05', '2022-05-16 18.34.51', '2022-05-23 14.05.07', '2022-06-23 15.27.01', '2022-07-05 14.15.08', '2022-07-05 14.18.10', '2022-08-08 11.57.43', '2022-08-08 12.00.56', '2022-08-23 14.11.53']

calib_datetimes=
问题排查与解决

核心原因分析

从输出看,calib_dates的格式和定义的%Y-%m-%d %H.%M.%S完全匹配,但calib_datetimes为空,说明循环中抛出了异常但被运行环境静默捕获(比如GUI框架的异常处理机制),导致后续代码未执行。最常见的问题是:

  1. datetime模块导入错误:
    如果代码顶部没有正确导入datetime模块,或者导入方式与调用不匹配,会直接抛出NameError。比如:

    • 若用import datetime,调用时需写成datetime.datetime.strptime();
    • 若用from datetime import datetime,则datetime.strptime()是正确的。
  2. 隐性格式不匹配:
    虽然视觉上calib_dates的格式正确,但可能存在不可见字符(比如空格是全角字符),不过从给出的输出看这种概率极低。

解决步骤

  1. 检查并修正导入语句:
    在代码顶部添加正确的导入:

    # 方式一:导入整个datetime模块
    import datetime
    # 调用时需修改为:
    # calib_datetimes.append(datetime.datetime.strptime(calib_date, format))
    
    # 方式二:直接导入datetime类
    from datetime import datetime
    # 原调用代码无需修改
    
  2. 添加异常捕获定位问题:
    修改循环代码,加入异常捕获块,打印具体错误信息:

    for calib in calib_files:
        calib_date = ' '.join(calib.split(' ')[1:3])
        calib_dates.append(calib_date)
        try:
            dt = datetime.strptime(calib_date, format)
            calib_datetimes.append(dt)
        except Exception as e:
            print(f"处理日期 {calib_date} 时出错: {str(e)}")
    

    运行后就能看到具体的错误原因,针对性修复。

  3. 单独验证格式匹配:
    抽取一条calib_dates的内容单独测试,确认格式是否真的匹配:

    test_date = '2021-10-11 11.35.52'
    format = '%Y-%m-%d %H.%M.%S'
    from datetime import datetime
    print(datetime.strptime(test_date, format))
    

    如果这条能正常输出datetime对象,说明格式没问题,问题出在导入或运行环境。

内容的提问来源于stack exchange,提问作者simon_CS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:55:12