Python代码生成含指定日期的新文件时遭遇OSError错误求助
问题解决:生成含指定日期的合法文件名并保存文件
错误原因
你直接将**函数对象daysList**放入了f-string中,导致文件名变成了函数的内存地址字符串(Stations<function daysList at 0x000001F4E4BBC430>.csv),这种包含特殊字符的文件名不符合系统规范,触发了OSError。同时代码中定义了outfile变量却未使用,反而用了options.outfile,存在变量不一致问题。
修正步骤与代码示例
- 先调用
daysList()函数并传入用户输入的日期范围参数,获取日期列表 - 从日期列表中提取起始/结束日期,生成合法的文件名格式
- 统一文件操作的变量,确保使用生成的含日期的文件名
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
相关产品推荐
相关产品推荐

