MacOS Ventura下Pandas Dataframe转CSV遇只读文件系统错误
问题:Python保存CSV时触发只读文件系统错误
相关代码
CSV保存逻辑
# Converting the dataframe to a csv file relative_path = os.path.dirname(__file__) df.to_csv(relative_path+"/"+args.cleaned, index=False)
命令行参数定义
import argparse parser = argparse.ArgumentParser(description="Run data cleaning.") parser.add_argument('--cleaned', type=str, default='final.csv', help='Cleaned csv output')
触发的错误
OSError: [Errno 30] Read-only file system: '/final.csv'
已尝试的排查操作
- 谷歌、StackOverflow搜索该错误信息
- 使用
chmod命令为工作目录添加读写权限 - 查阅StackOverflow上目录相关的解决方案,但均不适用于当前CSV文件写入场景
额外背景
该代码此前在同一设备的同一工作目录稳定运行数月,近期重装Anaconda和Python后出现此问题,已查阅几乎所有相关StackOverflow帖子,未找到针对性解决方案,寻求可行建议。
解决方案建议
1. 检查相对路径的有效性
重装环境后,__file__的获取逻辑可能因运行方式(如IDE直接运行、交互式执行)改变,导致relative_path为空,最终尝试写入根目录/(只读)。先打印路径确认:
print(f"当前relative_path值: {relative_path}")
如果输出为空,改用当前工作目录获取方式:
import os # 替换原relative_path赋值 relative_path = os.getcwd() df.to_csv(os.path.join(relative_path, args.cleaned), index=False)
2. 改用安全的路径拼接方式
直接用+拼接路径容易出现空路径、分隔符错误,改用os.path.join自动处理路径问题:
df.to_csv(os.path.join(relative_path, args.cleaned), index=False)
3. 确认目录权限与归属
重装环境后用户权限可能变化,除chmod外,检查目录所有者:
ls -ld /你的工作目录路径
若所有者非当前用户,修改归属:
sudo chown 你的用户名:用户组 /你的工作目录路径
4. 绝对路径测试排查
直接指定有读写权限的绝对路径测试,确认是否为路径拼接问题:
df.to_csv("/home/你的用户名/工作目录/final.csv", index=False)
若能成功写入,说明问题出在相对路径获取环节。
内容的提问来源于stack exchange,提问作者amp1590
相关产品推荐
相关产品推荐

