Python3类中如何为日志/报告文件名正确拼接时间戳
Python3输出文件名拼接时间戳的实现方案
错误原因
你之前写的"users_ldap_report + REPORT_TIME.txt"无法运行的核心原因是:变量名被完整包裹在双引号内部,Python会将整段内容识别为普通固定字符串,不会解析替换REPORT_TIME变量的实际值,最终生成的文件名字面就是users_ldap_report + REPORT_TIME.txt,和预期带时间戳的命名逻辑完全不符,甚至可能触发路径匹配异常导致写入失败。
另外入参failed_users是列表类型,属于写入内容参数,和文件命名逻辑完全独立,不需要对这个入参做任何修改。
正确实现步骤
- 确保已正确导入time模块,且时间戳变量定义在文件名生成逻辑之前
import time # 时间戳格式可根据需求调整,当前为年月日时分秒无分隔符格式 REPORT_TIME = time.strftime("%Y%m%d%H%M%S") - 选择以下任意一种字符串拼接方式生成合法文件名,推荐优先使用可读性最高的f-string写法(兼容Python3.6及以上版本,是目前Python3的主流写法)
- f-string写法
report_filename = f"users_ldap_report_{REPORT_TIME}.txt" - format方法写法(兼容所有Python3版本)
report_filename = "users_ldap_report_{}.txt".format(REPORT_TIME) - 字符串直接拼接写法
report_filename = "users_ldap_report_" + REPORT_TIME + ".txt"
- f-string写法
- 调用原有写入方法即可,传参逻辑和你之前正常运行的版本完全一致
self.write_report(failed_users, report_filename)
注意事项
- 所有需要动态替换的变量,都不能放在引号包裹的静态字符串内部
- 如果需要时间戳带分隔符,可直接修改
strftime的格式参数,比如要加横杠分隔就写"%Y-%m-%d_%H%M%S",生成的文件名类似users_ldap_report_2024-05-20_143022.txt - 时间戳变量不要定义在文件名生成逻辑之后,否则会触发
NameError变量未定义报错
内容的提问来源于stack exchange,提问作者user2023
相关产品推荐
相关产品推荐

