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

使用JSON生成TXT文件时遇OSError: [Errno 22]无效参数求助

问题解决:文件名含\r导致OSError错误

问题分析

从报错信息'Saves/hello\r.txt'能看出,setname变量实际混入了回车符(\r)——这是Windows系统文件名禁止的控制字符,因此触发了OSError。即使你确认变量值为Hello,也可能是输入/赋值过程中带入了隐藏的控制字符(比如复制粘贴带换行的内容、用户输入误按回车、读取外部文本时未处理换行符等)。

解决方案

1. 验证变量真实内容

用repr()函数打印变量,能显示所有隐藏字符,快速确认是否存在\r或其他控制字符:

print(repr(setname))  # 若含\r,输出示例:'Hello\r'

2. 清理文件名中的非法字符

通过字符串处理或正则表达式,移除/替换Windows文件名不允许的字符(包括\r、\n、\、/等):

方法一:保留可打印字符,自动过滤控制字符

# 只保留可打印字符,自动移除\r、\n等控制字符
setname_clean = ''.join(c for c in setname if c.isprintable())

方法二:正则替换非法字符为下划线(更灵活)

import re
# 匹配所有Windows非法文件名字符,替换为下划线
invalid_filename_chars = r'[\\/:*?"<>|\r\n]'
setname_clean = re.sub(invalid_filename_chars, '_', setname.strip())

3. 改造原代码应用清理逻辑

将清理后的文件名用于文件操作:

import json
import re

# 定义文件名清理函数
def clean_filename(filename):
    invalid_chars = r'[\\/:*?"<>|\r\n]'
    return re.sub(invalid_chars, '_', filename.strip())

# 处理文件名
setname = "Hello"  # 你的原始变量
setname_clean = clean_filename(setname)

# 写入JSON文件
with open(f"Saves/{setname_clean}.txt", "w") as savefile:
    json.dump(data, savefile)

额外提示

如果setname来自用户输入或外部文本读取,建议在赋值环节就执行清理操作,从源头避免类似问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:57:25