在 MacOS Ventura 上将 panda 数据帧转换为 .csv 文件时出现“操作系统错误:[Errno 30] 只读文件系统:”

问题描述 投票:0回答:1

我有一个 python 代码(在终端上运行),我通过以下代码将 Dataframe 转换为 .csv 文件:

#Converting the dataframe to a csv file
relative_path = os.path.dirname(__file__)
df.to_csv(relative_path+"/"+args.cleaned, index=False)

其中

args.cleaned
在代码的上半部分定义如下:

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'

我在 Google 和 stackOverflow 上搜索了此错误,并尝试了一些方法,例如使用 chmod 授予对工作目录的读/写权限。我得到的最相关的来源是这个 stackOverflow 链接。但它涉及目录,许多解决方案不适用于像我使用 .csv 文件一样的文件。

重要提示:此代码在同一设备的同一工作目录中成功运行了好几个月,而且我从未遇到过任何问题。最近我不得不重新安装 Anaconda 和 Python,就在这之后,我遇到了这个问题。

我浏览了几乎所有与此错误相关的 StackOverflow 帖子,但没有找到解决方案,特别是针对 Python 中的 .csv 文件。

如有任何建议,我们将不胜感激。

python-3.x pandas csv macos-ventura oserror
1个回答
0
投票

我找到了解决办法。感谢@Yuri 的评论,因为我认为

relative_path
不会有任何问题,因为正如我在问题中提到的那样,相同的代码之前工作正常。

因此我打印了

__file__
relative_path
以进行调试。令人惊讶的是
__file__
打印了正确的值,但
relative_path
是空的!也就是说,不知何故,
os.path.dirname(__file__)
返回一个空字符串!这对我来说完全出乎意料,因为我已经在相同的位置使用相同的 IDE(PyCharm)使用了相同的代码,并且这行代码从未遇到过问题。

无论如何,然后我尝试了绝对路径来确保我得到脚本文件的绝对路径,无论它是如何执行的。以下代码行解决了错误:

script_path = os.path.dirname(os.path.realpath(__file__))
df.to_csv(script_path+"/"+args.cleaned, index=False)
© www.soinside.com 2019 - 2024. All rights reserved.