Python使用w/x模式创建文件时触发“File doesn't exist”错误咨询
错误原因
- 你生成的文件名
6/11/2021.txt中包含/字符,在Windows系统中/和\都是路径分隔符,系统会将6/11/识别为文件夹层级,而非文件名的一部分,当对应的6/11文件夹不存在时,就会触发FileNotFoundError报错,和你使用w还是x模式无关。
修复方案
- 首先替换
today变量中的非法文件名字符,Windows下禁止作为文件名的字符包括/ \ : * ? " < > |,你可以优先把日期分隔符从/换成-或者.这类合法字符:
# 示例:替换today中的斜杠为横杠 legal_today = today.replace("/", "-")
- 后续所有使用
today作为文件名的位置,都替换为处理后的合法文件名,同时可以省略先用x模式创建文件的冗余步骤,w模式本身就支持文件不存在时自动创建:
filename = open("filenames.txt", "w") filename.write(today) day = open(legal_today+".txt", "w")
- 另外你当前代码里的
day.write(title+": "+det, "(x)")写法存在错误,write方法只接收1个字符串参数,你传了两个参数会触发TypeError,要合并成一个字符串再写入:
# 修正write写法 day.write(f"{title}: {det} (x)")
优化建议
- 推荐使用
with语句管理文件操作,会自动完成文件关闭,避免忘记调用close()导致的资源泄漏,修改后完整参考代码如下:
print("You do not have any reminders for today.") print("Would you like to make some?") newtoday = input().lower() if newtoday == "yes": legal_today = today.replace("/", "-") with open("filenames.txt", "w") as filename: filename.write(today) with open(legal_today+".txt", "w") as day: print("What would you like the title of the reminder to be?") title = input() print("Add any extra details below e.g. time, place.") det = input() day.write(f"{title}: {det} (x)")
内容的提问来源于stack exchange,提问作者Nomzz
相关产品推荐
相关产品推荐

