
我有这个文件夹结构,在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发布于 2018-08-13 09:46:05
在运行python文件时,python解释器不会将当前目录更改为正在运行的文件的目录。
在您的例子中,您可能正在运行(从~/edi_parser):
standards/edi_standards.py为此,您必须使用__file__进行黑客攻击,获取资源文件的目录名并构建资源文件的相对路径:
os.path.join(os.path.dirname(__file__),"csv","transaction_groups.csv")无论如何,最好不要依赖当前目录来打开资源文件。无论当前目录是什么,这个方法都能工作。
发布于 2018-08-14 11:20:47
我确实同意Jean上面的回答,我想提一下,os.path.join并不认为当前工作目录的绝对路径是第一个参数,例如下面的代码。
>>> os.path.join('Functions','hello')
'Functions/hello'参见另一个示例
>>> os.path.join('Functions','hello','/home/naseer/Python','hai') '/home/naseer/Python/hai'
正式文件指出,每当我们将绝对路径作为参数给os.path.join时,所有以前的路径参数都会被丢弃,连接将从绝对路径参数继续进行。
我想强调的一点是,我们不应该期望函数os.path.join将与相对路径一起工作。因此,您必须提交绝对路径才能正确定位您的文件。
https://stackoverflow.com/questions/51819441
复制相似问题