我具有此文件夹结构,我想在edi_standards.py
中打开csv/transaction_groups.csv
但是该代码仅在我像这样os.path.join('standards', 'csv', 'transaction_groups.csv')
我认为应该是os.path.join('csv', 'transaction_groups.csv')
,因为edi_standards.py
和csv/
都在同一文件夹standards/
中的同一级别上
这是打印__file__
的输出,以防您怀疑我在说什么:
>>> print(__file__)
~/edi_parser/standards/edi_standards.py
答案 0 :(得分:4)
在运行python文件时,python解释器不会将当前目录更改为正在运行的文件的目录。
就您而言,您可能正在跑步(来自coder
):
~/edi_parser
为此,您必须使用standards/edi_standards.py
破解某些东西,并使用目录名并构建资源文件的相对路径:
__file__
无论如何,不的好习惯是依靠当前目录打开资源文件。无论当前目录是什么,此方法都可以使用。
答案 1 :(得分:1)
我同意上述让·弗朗索瓦的答案,
我想提到os.path.join
并不将当前工作目录的绝对路径作为第一个参数
例如考虑下面的代码
>>> os.path.join('Functions','hello')
'Functions/hello'
再看一个例子
>>> os.path.join('Functions','hello','/home/naseer/Python','hai')
'/home/naseer/Python/hai'
Official Documentation
指出只要我们将绝对路径作为os.path.join
的参数,则所有先前的路径参数都将被丢弃,并从绝对路径参数继续进行连接。
我想强调的一点是,我们不应该期望函数os.path.join
将在相对路径下工作。因此,您必须提交绝对路径才能正确定位文件。