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

kla*_*aus 2 python

我有一个在其目录中加载大量文件的脚本,并且可以从任何位置调用该脚本。我想知道os.chdir(os.path.dirname(__file__))在文件的开头使用是否可以使事情不那么冗长。

脚本目录:

script/path/
  do_stuff.py
  src/
    ..some files
Run Code Online (Sandbox Code Playgroud)

该脚本是这样调用的:

$ python3 script/path/do_stuff.py
Run Code Online (Sandbox Code Playgroud)

所以,而不是做

with open(os.path.join(os.path.dirname(__file__), 'src/..')) as f:
    ...
Run Code Online (Sandbox Code Playgroud)

os.chdir(os.path.dirname(__file__))在导入后添加并执行:

with open('src/..') as f:
    ...
Run Code Online (Sandbox Code Playgroud)

这被认为是一个好习惯吗?或者我应该避免它以避免在更复杂的项目中出现并发症?

Kon*_*lph 6

另一种选择:

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

    def get_resource_file(path):
        return os.path.join(os.path.dirname(__file__), path)
    
    Run Code Online (Sandbox Code Playgroud)

    进而:

    with open(get_resource_file('src/…')):
        …
    
    Run Code Online (Sandbox Code Playgroud)

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

path/to/tool local/path/to/file
Run Code Online (Sandbox Code Playgroud)

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