运行脚本在目录外时使用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
所以我目前使用 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