6

我有以下代码:

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. 当然,我可以通过使用 fixed 来解决这个os.chdir("../originalFolder")问题,但这对我来说似乎有点错误,但这适用于 eclipse 和控制台。

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

那么我的方法有什么问题还是我搞砸了?要不然是啥?:)

提前致谢!:)

4

1 回答 1

8

看看什么是价值__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() 。

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

于 2012-03-27T10:52:47.073 回答