使用 os.path.join 打开非扩展文件

opening non-extension file with os.path.join

我可能遗漏了一件小事,但不确定如何解决这个问题。

有目录Pic_checker。在这个目录中我有:

Pic_checker
  --setup.py
  /src
    --app.py
  /dir_with_doc
    --doc

setup.pyentry_points={"console_scripts": ["pbl=app:main"]} bcs 我想要 运行 只需输入 pbl

src 目录 app.py 具有 main 功能。

dir_with_doc 目录包含 doc 文件 - 此文件没有扩展名。

在这个 main 函数中我有:

with open(
    os.path.join(__file__, "../../dir_with_doc/doc"),
    encoding="utf-8",
) as f:

Bcs 我想 运行 终端中只有 pbl 命令的脚本,我需要输入绝对路径(我不喜欢这样)或将相对路径输入 app.py 文件,在 os.path.join 函数中使用 __file__ 并导航。遗憾的是出现错误:

print(os.path.join(__file__, "../../dir_with_doc/doc"))

# /home/user/Pic_checker/src/app.py/../../dir_with_doc/doc

NotADirectoryError: [Errno 20] Not a directory: /home/user/Pic_checker/src/app.py/../../dir_with_doc/doc.

我之前尝试打开 os.path.join 东西(在 windows 上使用 configparser.Configparser().read())并且它使用的是常规文件,所以我认为问题出在扩展名 (?) 和我的问题上是:

如何使非扩展文件适合它?或者是否有另一种读取非扩展 doc 文件相对于脚本文件的方法?还是我遗漏了一个小细节?

谢谢!

这是要走的路。

with open(
    f"{os.path.dirname(os.path.realpath(__file__))}/../dir_with_doc/doc"
)

我认为,要使其正常工作,您应该将 os.path.join 函数生成的路径转换为完整的现有路径,扩展按字面解释的 .. 符号。您可以使用 os.path.realpath 函数。所以试试这个:

with open(
    os.path.realpath(os.path.join(__file__, "../../dir_with_doc/doc")),
    encoding="utf-8",
) as f: