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

Python写日志代码Linux正常Windows报OSError22如何实现跨系统兼容

兼容Windows/Linux的代码调整方案

报错原因

Windows系统对文件名的合法字符有严格限制,不允许包含:、/、\、*、?、"、<、>、|这些特殊字符,原有代码中生成文件名用的时间格式%Y-%m-%d %H:%M:%S带有冒号,在Linux下可以正常使用,但在Windows下会直接触发无效参数报错。

修改要点

  • 替换时间格式化字符串里的冒号,改为横杠、下划线等合法的分隔符
  • 补全缺失的csv模块导入
  • 新增logs文件夹不存在时的自动创建逻辑,避免无文件夹导致的写入报错
  • 去掉不符合CSV标准的自定义分隔符配置,新增文件操作的兼容参数

完整修改后代码

import datetime
import csv
from os.path import dirname, abspath, join, exists
from os import makedirs

# 计算logs文件夹路径
parent_path = dirname(dirname(abspath(__file__)))
logs_folder = join(parent_path, 'logs')
# 自动创建不存在的logs文件夹
if not exists(logs_folder):
    makedirs(logs_folder, exist_ok=True)

# 生成不带冒号的跨平台合法文件名
file_name = datetime.datetime.now().strftime("%Y-%m-%d %H-%M-%S")+'.csv'

with open(join(logs_folder, file_name), 'w', newline='', encoding='utf-8') as fp:
    # 指定newline参数避免Windows下CSV自动插入空行,默认分隔符符合CSV标准规范
    writer = csv.writer(fp)
    writer.writerow(list_input)

额外说明

  • 打开文件时指定newline=''是Python官方文档推荐的CSV写入标准写法,可以避免Windows系统下生成的CSV文件每行末尾多一个空行的问题
  • 新增encoding='utf-8'参数可以保证中英文内容在两个系统下写入读取的编码一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:45:04