Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在文件的开头使用os.chdir(os.path.dirname(_文件__))是一种好的做法吗?_Python - Fatal编程技术网

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
    。输入文件的相对路径仅相对于启动工具的目录有意义。所以,至少要确保在更改目录之前加载所有用户指定的路径。