我发现脚本的“当前工作目录”最初不是脚本所在的位置,而是用户在他/她运行脚本时的位置。
如果脚本位于/Desktop/Projects/pythonProject/myscript.py
,但是当我运行脚本时,我在终端的/Documents/Arbitrary
处,那将是它的当前工作目录,并尝试{{1将要找到File Not Found,因为它没有找到正确的目录。
那么如果一个脚本无法知道它在哪里运行,那该脚本应该如何打开呢?这是怎么处理的?
我最初的想法是使用绝对路径。假设我的脚本需要打开open('data.txt')
并将其与data.txt
包一起存储在其中。然后我会说pythonProject
。
但是,如果没有编辑其中的每个路径,您就无法移动项目,因此这不是正确的解决方案。
或者只是在运行脚本时必须位于脚本所在的目录中?这似乎也不对。
对此我是否有一些简单的操作,我没想到?您是否应该open('/Desktop/Projects/pythonProject/data.txt')
到脚本开头的脚本位置?
答案 0 :(得分:2)
使用sorted(word_list , key = len)
,os.path.dirname
,os.path.abspath
和os.path.realpath
变量获取当前文件的目录路径:
__file__
然后,要创建跨平台文件路径,请使用import os
file_dir = os.path.dirname(os.path.abspath(os.path.realpath(__file__)))
:
os.path.join()
或者,您可以将当前工作目录更改为正在运行的文件目录,这样您每次都不必os.path.join(file_dir, "test.txt")
:
os.path.join
为什么要使用os.path.chdir(os.path.dirname(os.path.abspath(os.path.realpath(__file__))))
和 os.path.abspath
?内部os.path.realpath
解析符号链接,而realpath
解析相对路径。如果您确定无法使用任何符号链接,则可以省略此内部abspath
调用。
答案 1 :(得分:1)
print type(u'hello')
<type 'unicode'>
变量中始终提供模块的位置。您可以使用__file__
中的函数(我主要考虑basedir和join)将模块相对路径转换为绝对路径