在文件开头使用os.chdir(os.path.dirname(__ file__))是一个好习惯吗?

时间:2019-07-14 19:35:54

标签: python

我有一个脚本可以在其目录中加载很多文件,并且可以从任何位置调用此脚本。我想知道是否可以在文件开头使用os.chdir(os.path.dirname(__file__))来使事情变得不太冗长。

脚本目录:

script/path/
  do_stuff.py
  src/
    ..some files

该脚本的名称如下:

$ python3 script/path/do_stuff.py

所以,而不是这样做

with open(os.path.join(os.path.dirname(__file__), 'src/..')) as f:
    ...

我在导入后添加os.chdir(os.path.dirname(__file__))并这样做:

with open('src/..') as f:
    ...

这被认为是一种好习惯吗?还是应该避免使用它,以避免在更复杂的项目中出现复杂情况?

1 个答案:

答案 0 :(得分:4)

另一种选择:

  1. 编写一个函数,为您提供本地文件资源的正确路径:

    def get_resource_file(path):
        return os.path.join(os.path.dirname(__file__), path)
    

    然后:

    with open(get_resource_file('src/…')):
        …
    

正如我的评论中所述,更改当前工作目录意味着您不再可以接受来自用户输入的相对路径(除非您首先存储原始工作目录并从该目录构造绝对路径)。这可能是命令行工具的最常见情况:

path/to/tool local/path/to/file

相比之下,cd离开用户工作目录的收益相对较小。