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

Python代码生成含指定日期的新文件时遭遇OSError错误求助

问题解决:生成含指定日期的合法文件名并保存文件

错误原因

你直接将**函数对象daysList**放入了f-string中,导致文件名变成了函数的内存地址字符串(Stations<function daysList at 0x000001F4E4BBC430>.csv),这种包含特殊字符的文件名不符合系统规范,触发了OSError。同时代码中定义了outfile变量却未使用,反而用了options.outfile,存在变量不一致问题。

修正步骤与代码示例

  1. 先调用daysList()函数并传入用户输入的日期范围参数,获取日期列表
  2. 从日期列表中提取起始/结束日期,生成合法的文件名格式
  3. 统一文件操作的变量,确保使用生成的含日期的文件名
def daysList(adate) :
    from datetime import date, timedelta

    from_y = int(adate[0][0:4])
    from_m = int(adate[0][4:6])
    from_d = int(adate[0][6:])

    to_y  = int(adate[1][0:4])
    to_m  = int(adate[1][4:6])
    to_d  = int(adate[1][6:])

    to_date = date(to_y,to_m,to_d)
    from_date = date(from_y,from_m,from_d)

    days = (to_date-from_date).days

    dateList = []
    for d in range(0,days+1) :
        n_date = str(from_date + timedelta(days=d))
        dateList.append(n_date.split("-"))

    return dateList

# 替换为实际的用户输入日期范围,比如["20240101", "20240107"]
user_input_dates = ["20240101", "20240107"]
# 调用函数获取日期列表
date_list = daysList(user_input_dates)

# 提取起始和结束日期,格式化为YYYY-MM-DD
start_date = "-".join(date_list[0])
end_date = "-".join(date_list[-1])

# 生成合法的带日期文件名
outfile = f'Stations_{start_date}_to_{end_date}.csv'

# 使用生成的文件名保存数据
with open(outfile, 'w') as ofile:
    for row in DB:
        ofile.write('%s\n' % ','.join(row))

关键注意点

  • 必须调用daysList(adate)而非直接使用函数名,才能拿到实际的日期数据
  • 文件名尽量用下划线、连字符分隔,避免特殊字符,保证系统可识别
  • 确保文件操作时使用的变量和你生成的文件名变量一致,不要出现定义了outfile却用options.outfile的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:18:09