【问题标题】:Weird python file path behavior奇怪的python文件路径行为
【发布时间】:2019-01-20 00:19:17
【问题描述】:

我有这个文件夹结构,在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

【问题讨论】:

  • 那是因为您从不同的目录运行代码。试试os.path.join(os.path.dirname(__file__),"csv","transaction_groups.csv")

标签: python file operating-system


【解决方案1】:

当您运行 python 文件时,python 解释器不会将 当前目录 更改为您正在运行的文件的目录。

在您的情况下,您可能正在运行(来自~/edi_parser):

standards/edi_standards.py

为此,您必须使用 __file__ 破解某些内容,获取目录名并构建资源文件的相对路径:

os.path.join(os.path.dirname(__file__),"csv","transaction_groups.csv")

无论如何,最好依赖当前目录打开资源文件。无论当前目录是什么,此方法都适用。

【讨论】:

  • 谢谢你就是这样。其实我不是故意这样运行的,而是IDE。
【解决方案2】:

我同意上面让-弗朗索瓦的回答, 我想提一下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 可以使用相对路径。所以你必须提交绝对路径才能正确定位你的文件。

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多