python os.path.realpath无法正常工作

时间:2012-03-27 09:58:50

标签: python path chdir realpath

我有以下代码:

os.chdir(os.path.dirname(os.path.realpath(__file__)) + "/../test")
path.append(os.getcwd())
os.chdir(os.path.dirname(os.path.realpath(__file__)))

哪个应该将/../test添加到python路径,并且它会这样做,然后使用PyDev在eclipse之后运行顺利。

但是当我从控制台第二次吃同一个应用程序时os.chdir做错了,实际上错误的是os.path.realpath(__file__) cus它返回../test/myFile.py而不是../originalFolder/myFile.py。当然我可以通过使用固定的os.chdir("../originalFolder")来解决这个问题,但这对我来说似乎有点不对劲,但这适用于eclipse和console。

P.S。我实际上正在使用os.getcwd()因为我想确保没有添加这样的文件夹,否则我根本不需要切换目录

我的方法有什么问题,或者我搞砸了什么?或者是什么? :)

提前致谢! :)

1 个答案:

答案 0 :(得分:6)

看看__file__的价值是什么。它不包含脚本的绝对路径,它是来自命令行的值,因此它可能类似于“./myFile.py”或“myFile.py”。另外,realpath()不会使路径成为绝对路径,因此在不同目录中调用的realpath(“myFile.py”)仍会返回“myFile.py”。

我认为你应该做这样的事情:

import os.path

script_dir = os.path.dirname(os.path.abspath(__file__))
target_dir = os.path.join(script_dir, '..', 'test')
print(os.getcwd())
os.chdir(target_dir)
print(os.getcwd())
os.chdir(script_dir)
print(os.getcwd())

在我的电脑上(Windows)我的结果如下:

e:\parser>c:\Python27\python.exe .\rp.py
e:\parser
e:\test
e:\parser

e:\parser>c:\Python27\python.exe ..\parser\rp.py
e:\parser
e:\test
e:\parser

注意:如果您关心兼容性(您不喜欢奇怪的路径错误),只要组合路径,就应该使用 os.path.join()。< / p>

注意:我知道我的解决方案很简单(记住绝对路径),但有时最简单的解决方案是最好的。