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

写入artifacts目录下raw.csv时出现Permission Denied错误求助

权限拒绝问题排查与修复

问题描述

尝试读取notebooks/data/Dataset.csv并保存到artifacts/raw.csv时,已为artifacts文件夹授予权限,但仍报错:

[Errno 13] Permission denied: 'artifacts\raw.csv'

问题代码

@dataclass
class DataIngestionConfig:
    train_data_path:str = os.path.join("artifacts/train_data")
    test_data_path:str = os.path.join("artifacts/test_data")
    raw_data_path:str = os.path.join('artifacts','raw.csv')
# 权限拒绝发生在这个路径     ^

class DataIngestionPhase:
    def __init__(self):
        self.dataIngestionConfig = DataIngestionConfig

    def dataIngestion(self):
        mlflow_logs = Mlflow_logs()
        with mlflow.start_run():
            logging.info("Data Ingestion Phase Start")
            mlflow_logs.log_msg("Data Ingestion Phase Start")
            try:
                df = pd.read_csv("notebooks/data/Dataset.csv")
                os.makedirs(os.path.join(self.dataIngestionConfig.raw_data_path), exist_ok=True)
                df.to_csv(self.dataIngestionConfig.raw_data_path, index=False)
            except Exception as e:
                mlflow_logs.log_msg(f"Exception : {e}")
                raise CustomException(e,sys)

问题原因与修复方案

  • 核心错误点:代码中os.makedirs(os.path.join(self.dataIngestionConfig.raw_data_path), exist_ok=True)错误地将raw.csv文件路径当作文件夹路径创建。os.path.join(self.dataIngestionConfig.raw_data_path)得到的是artifacts/raw.csv,调用os.makedirs会尝试创建名为raw.csv的文件夹,后续写入文件时,要么因同名文件夹存在无法写入,要么创建文件夹时就触发权限问题,最终导致权限拒绝报错。
  • 修复步骤:
    1. 修改目录创建逻辑,仅创建raw.csv所在的父目录,而非包含文件名的路径:
      os.makedirs(os.path.dirname(self.dataIngestionConfig.raw_data_path), exist_ok=True)
      
    2. 确认artifacts目录的权限:
      • Windows:右键artifacts文件夹→属性→安全,确保当前用户拥有写入权限
      • Linux/macOS:执行chmod -R 755 artifacts调整权限(按需修改)
    3. 检查raw.csv是否被其他程序占用(如Excel),占用状态下无法写入。
  • 潜在bug修复:原代码中self.dataIngestionConfig = DataIngestionConfig未实例化类,需改为self.dataIngestionConfig = DataIngestionConfig(),否则无法正确访问配置属性。

修复后的代码片段

@dataclass
class DataIngestionConfig:
    train_data_path:str = os.path.join("artifacts/train_data")
    test_data_path:str = os.path.join("artifacts/test_data")
    raw_data_path:str = os.path.join('artifacts','raw.csv')

class DataIngestionPhase:
    def __init__(self):
        self.dataIngestionConfig = DataIngestionConfig()

    def dataIngestion(self):
        mlflow_logs = Mlflow_logs()
        with mlflow.start_run():
            logging.info("Data Ingestion Phase Start")
            mlflow_logs.log_msg("Data Ingestion Phase Start")
            try:
                df = pd.read_csv("notebooks/data/Dataset.csv")
                os.makedirs(os.path.dirname(self.dataIngestionConfig.raw_data_path), exist_ok=True)
                df.to_csv(self.dataIngestionConfig.raw_data_path, index=False)
            except Exception as e:
                mlflow_logs.log_msg(f"Exception : {e}")
                raise CustomException(e,sys)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:35:01