运行脚本在目录外时使用Path检查文件是否存在

Using Path to check if file exists when running script outside of the directory

所以我目前使用 Path 来检查文件是否存在

from pathlib import Path

if Path("main.conf").is_file():
    pass
else:
   setup_config()

虽然只要我在 运行 运行脚本的目录中,它就可以工作,但我想让它在我所在的任何目录中工作,只是 运行 剧本。我知道它不起作用,因为它期望 main.conf 位于我当前所在的目录中,但是我如何告诉路径只检查脚本所在的文件夹中的文件?

可以使用sys.argv[0]解析脚本的绝对路径,然后将脚本名替换成配置文件即可查看,eg:

import sys
import pathlib

path = path.Pathlib(sys.argv[0]).resolve()
if path.with_name('main.conf').is_file():
    # ...
else:
    # ...

虽然看起来你可能不应该担心检查和构建你的 setup_config 所以它需要一个文件名作为参数,例如:

def setup_config(filename):
    # use with to open file here
    with open(filename) as fin:
        # do whatever for config setup

然后将您的主文件包装在 try/except 中(这也会覆盖文件而不是 exists/can 由于其他原因未打开的文件),例如:

path = pathlib.Path(sys.argv[0]).resolve()
try:
    setup_config(path.with_name('main.conf'))
except IOError:
    pass