奇怪的python文件路径行为

时间:2018-08-13 09:41:35

标签: python file operating-system

enter image description here

我具有此文件夹结构,我想在edi_standards.py中打开csv/transaction_groups.csv

但是该代码仅在我像这样os.path.join('standards', 'csv', 'transaction_groups.csv')

访问时才有效

我认为应该是os.path.join('csv', 'transaction_groups.csv'),因为edi_standards.pycsv/都在同一文件夹standards/中的同一级别上

这是打印__file__的输出,以防您怀疑我在说什么:

>>> print(__file__)
~/edi_parser/standards/edi_standards.py

2 个答案:

答案 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将在相对路径下工作。因此,您必须提交绝对路径才能正确定位文件。