python中的绝对路径和相对路径问题

时间:2012-06-03 10:27:51

标签: python linux

如何在python中删除与路径相关的问题?

例如我在目录TEST中有一个模块test.py

**test.py**
import os
file_path = os.getcwd() + '/../abc.txt'

f = open(file_path)
lines = f.readlines()
f.close

print lines

现在,当我在TEST目录外执行上述程序时,它给出了错误: -

Traceback (most recent call last):
  File "TEST/test.py", line 4, in ?
    f = open(file_path)
IOError: [Errno 2] No such file or directory: 'abc.txt'

如何解决这类问题。基本上这只是我放弃的一个小例子。

我正在处理这种巨大的问题。

我正在使用现有的包,它只需要从它所在的目录运行,如何解决这类问题,以便我可以从任何我想要的地方运行程序。

或者能够处理在TEST目录内或TEST目录外运行的上述示例。

任何帮助。?

2 个答案:

答案 0 :(得分:2)

我认为最简单的方法是将当前工作目录更改为脚本文件之一:

import os
os.chdir(os.path.dirname(__file__))

但是,如果脚本也处理原始工作目录中的文件,则可能会出现问题。

答案 1 :(得分:0)

您的代码正在查看当前工作目录,并将其用作查找所需文件的基础。这几乎从来都不是一个好主意,正如你现在所发现的那样。

EmilVikström在回答中提到的解决方案是一个quickfix解决方案,但更正确的解决方案是不使用当前工作目录作为起点。

正如在另一个答案中所提到的,__file__在解释器中不可用,但它是您代码的绝佳解决方案。

将第二行重写为以下内容:

file_path = os.path.join(os.path.dirname(__file__), "..", "abc.txt")

这将获取当前文件所在的目录,首先使用..然后使用abc.txt加入,以创建所需的路径。

您应该以相同的方式在代码中的其他位置修复os.getcwd()的类似用法。