Python 在文件的开头使用os.chdir(os.path.dirname(_文件__))是一种好的做法吗?
我有一个脚本,在它的目录中加载了很多文件,这个脚本可以从任何位置调用。我想知道是否可以在文件的开头使用Python 在文件的开头使用os.chdir(os.path.dirname(_文件__))是一种好的做法吗?,python,Python,我有一个脚本,在它的目录中加载了很多文件,这个脚本可以从任何位置调用。我想知道是否可以在文件的开头使用os.chdir(os.path.dirname(_文件__))来减少细节 脚本的目录: script/path/ do_stuff.py src/ ..some files 脚本的名称如下所示: $ python3 script/path/do_stuff.py 因此,与其这样做 with open(os.path.join(os.path.dirname(__file__
os.chdir(os.path.dirname(_文件__))
来减少细节
脚本的目录:
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(_文件__))
,并执行以下操作:
with open('src/..') as f:
...
这被认为是一种好的做法吗?或者我应该避免它,以避免更复杂项目的复杂性?另一种选择:
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
'ing离开用户的工作目录的收益相对较小。我看不出它有什么问题。我确实看到它有什么问题。也就是说,命令行工具最常见的用例(使用相对路径调用它们)将不再有效。除此之外,更改目录实际上是一项非常复杂的操作,并非所有文件系统都支持它。这在实践中确实会破坏工具。它很少见,也相对模糊,但它确实存在,事实上它给同事带来了很大的麻烦。举个例子来说明@KonradRudolph在说什么:python path/To/tool.py.././inputfile1.dat./file2.dat
。输入文件的相对路径仅相对于启动工具的目录有意义。所以,至少要确保在更改目录之前加载所有用户指定的路径。