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

Python使用with open生成不覆盖的每日游戏数据CSV文件报错求助

解决方案

1. 修复写入权限错误

open()函数默认以**只读模式('r')**打开文件,这是触发io.UnsupportedOperation: not writable错误的核心原因。你需要显式指定写入模式:

  • 'w':覆盖已有文件(不符合你「不覆盖」的需求)
  • 'x':仅当文件不存在时创建并写入,若文件已存在则抛出异常(完美匹配你「每日最多游玩一次」的规则)
  • 'a':追加模式(若后续需要同一日多次写入可选用)

另外你文件名格式化代码有误:"[].csv".format(get_date)会生成[]20240520.csv这类错误文件名,应改为f"{get_date}.csv"或"{}.csv".format(get_date)。同时with语句会自动关闭文件,无需手动调用text_file.close()。

2. 实现文件不覆盖(每日仅写入一次)

结合'x'模式和日期命名逻辑,就能保证每日最多生成一个文件,不会覆盖已有内容。如果当日已游玩过(文件存在),代码会抛出FileExistsError,可捕获该异常给用户提示。

3. 指定存储文件夹

推荐用pathlib模块处理路径,能自动适配不同操作系统的路径分隔符,还能一键创建目标文件夹。

完整可运行代码

from datetime import datetime
from pathlib import Path

# 定义存储游戏数据的文件夹
save_folder = Path("game_saves")
# 文件夹不存在则自动创建,已存在则不报错
save_folder.mkdir(exist_ok=True)

# 生成当日日期格式的文件名
current_date = datetime.today().strftime('%Y%m%d')
save_file_path = save_folder / f"{current_date}.csv"

# 模拟你的游戏数据(替换为实际数据即可)
game_data = "玩家名称,得分,游戏时长\n张三,890,156"

try:
    # 'x'模式:仅文件不存在时创建并写入
    with open(save_file_path, 'x', encoding='utf-8') as text_file:
        print(game_data, file=text_file)
    print("游戏数据保存成功!")
except FileExistsError:
    print("今日已游玩过,无需重复保存数据。")

代码说明

  • save_folder.mkdir(exist_ok=True):自动创建game_saves文件夹,避免因文件夹不存在报错
  • save_folder / f"{current_date}.csv":用pathlib的路径拼接生成完整文件路径,比如game_saves/20240520.csv
  • encoding='utf-8':避免CSV文件出现中文乱码问题
  • 捕获FileExistsError:给用户友好的提示信息

备选:同一日追加数据方案

如果后续需要允许同一日多次游玩并追加记录,可将写入模式改为'a',此时会在文件末尾追加新数据,不会覆盖原有内容:

with open(save_file_path, 'a', encoding='utf-8') as text_file:
    print(game_data, file=text_file)

内容的提问来源于stack exchange,提问作者Annah.Grace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:35:51