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

使用变量命名创建日志文件时触发FileNotFoundError问题

问题分析与解决

错误原因

你遇到的FileNotFoundError是因为open()函数只会创建目标文件,但不会自动创建路径中不存在的中间目录。比如你要创建log/8/14/2022.txt,如果log、log/8、log/8/14这些目录不存在,open()就会报错;而直接用log.txt时不需要额外目录,所以能正常创建。

解决方案

方法1:用os.makedirs预创建目录

导入os模块,在打开文件前先创建所有需要的父目录,设置exist_ok=True可以忽略目录已存在的情况:

import os
from datetime import datetime

current_time = datetime.now()
# 拆分路径:先构造目录部分,再拼接文件名
log_dir = os.path.join("log", str(current_time.month), str(current_time.day))
log_file = os.path.join(log_dir, f"{current_time.year}.txt")

# 创建目录(包含所有缺失的父目录)
os.makedirs(log_dir, exist_ok=True)

# 打开文件写入
with open(log_file, "a") as log_txt:
    log_txt.write("日志内容\n")

方法2:用pathlib(Python 3.4+推荐)

pathlib是更简洁的路径处理工具,能自动处理跨系统的路径分隔符:

from pathlib import Path
from datetime import datetime

current_time = datetime.now()
# 构造完整路径对象
log_path = Path("log") / str(current_time.month) / str(current_time.day) / f"{current_time.year}.txt"

# 创建父目录(parents=True表示创建所有层级的父目录)
log_path.parent.mkdir(parents=True, exist_ok=True)

# 写入日志
with open(log_path, "a") as log_txt:
    log_txt.write("日志内容\n")

注意事项

  • 推荐用with语句打开文件,它会自动帮你关闭文件,避免忘记close()导致的资源泄漏。
  • 不要手动用+拼接路径,os.path.join()或pathlib的路径拼接方式更可靠,能适配Windows、Linux等不同系统的路径格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:39:22