如何处理文件路径?

时间:2017-04-04 04:11:55

标签: python

我发现脚本的“当前工作目录”最初不是脚本所在的位置,而是用户在他/她运行脚本时的位置。

如果脚本位于/Desktop/Projects/pythonProject/myscript.py,但是当我运行脚本时,我在终端的/Documents/Arbitrary处,那将是它的当前工作目录,并尝试{{1将要找到File Not Found,因为它没有找到正确的目录。

那么如果一个脚本无法知道它在哪里运行,那该脚本应该如何打开呢?这是怎么处理的?

我最初的想法是使用绝对路径。假设我的脚本需要打开open('data.txt')并将其与data.txt包一起存储在其中。然后我会说pythonProject

但是,如果没有编辑其中的每个路径,您就无法移动项目,因此这不是正确的解决方案。

或者只是在运行脚本时必须位于脚本所在的目录中?这似乎也不对。

对此我是否有一些简单的操作,我没想到?您是否应该open('/Desktop/Projects/pythonProject/data.txt')到脚本开头的脚本位置?

2 个答案:

答案 0 :(得分:2)

使用sorted(word_list , key = len)os.path.dirnameos.path.abspathos.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)将模块相对路径转换为绝对路径