jj.*_*jj. 5 python path realpath chdir
我有以下代码:
os.chdir(os.path.dirname(os.path.realpath(__file__)) + "/../test")
path.append(os.getcwd())
os.chdir(os.path.dirname(os.path.realpath(__file__)))
Run Code Online (Sandbox Code Playgroud)
哪个应该添加/../test到python路径,并且它会这样做,并且它在使用PyDev的eclipse之后都可以顺利运行.
但是,当我从控制台第二次os.chdir吃同样的应用程序时,做错了什么,实际上错误的是os.path.realpath(__file__)它../test/myFile.py在cus中返回而不是../originalFolder/myFile.py.当然我可以通过使用fixed修复此os.chdir("../originalFolder")问题,但这对我来说似乎有点不对,但这适用于eclipse和console.
PS我os.getcwd()实际上是因为我想确保没有添加这样的文件夹,否则我根本不需要切换目录
那么我的方法有什么问题,或者我搞砸了什么?或者是什么?:)
提前致谢!:)
看看有什么价值__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())
Run Code Online (Sandbox Code Playgroud)
在我的电脑(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
Run Code Online (Sandbox Code Playgroud)
注意:如果您关心兼容性(您不喜欢奇怪的路径错误),则应在组合路径时使用os.path.join().
注意:我知道我的解决方案很简单(记住绝对路径),但有时最简单的解决方案是最好的.