提取文件名日期生成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框架的异常处理机制),导致后续代码未执行。最常见的问题是:
datetime模块导入错误:
如果代码顶部没有正确导入datetime模块,或者导入方式与调用不匹配,会直接抛出NameError。比如:- 若用
import datetime,调用时需写成datetime.datetime.strptime(); - 若用
from datetime import datetime,则datetime.strptime()是正确的。
- 若用
隐性格式不匹配:
虽然视觉上calib_dates的格式正确,但可能存在不可见字符(比如空格是全角字符),不过从给出的输出看这种概率极低。
解决步骤
检查并修正导入语句:
在代码顶部添加正确的导入:# 方式一:导入整个datetime模块 import datetime # 调用时需修改为: # calib_datetimes.append(datetime.datetime.strptime(calib_date, format)) # 方式二:直接导入datetime类 from datetime import datetime # 原调用代码无需修改添加异常捕获定位问题:
修改循环代码,加入异常捕获块,打印具体错误信息: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)}")运行后就能看到具体的错误原因,针对性修复。
单独验证格式匹配:
抽取一条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
相关产品推荐
相关产品推荐

