我有一个在其目录中加载大量文件的脚本,并且可以从任何位置调用该脚本。我想知道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)
这被认为是一个好习惯吗?或者我应该避免它以避免在更复杂的项目中出现并发症?
另一种选择:
编写一个函数,为您提供本地文件资源的正确路径:
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远离用户工作目录的收益相对较小。