如何从模块外部读取与 __main__.py 相同模块中包含的文件?

Posted

技术标签:

【中文标题】如何从模块外部读取与 __main__.py 相同模块中包含的文件?【英文标题】:How to read a file contained in same module as __main__.py from outside the module? 【发布时间】:2021-11-23 19:35:11 【问题描述】:

这是我的文件树:

foo  
|-- bar  
|-- |-- __main__.py  
`-- `-- some_file.txt  

这里是__main__.py

with open('some_file.txt', 'r') as f:
    print(f.read())

当当前工作目录是 bar/ 并且我运行时

$ python __main__.py

结果是将 some_file.txt 中的任何内容打印到控制台。

当我将当前工作目录更改为 foo/ 并运行时

$ python bar/

我明白了:

Traceback (most recent call last):
  File "/data/data/com.termux/files/home/foo/bar/__main__.py", line 1, in <module>
    with open('some_file.txt', 'r') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'some_file.txt'

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您可以使用__file__ 获取脚本的路径。因此,您可以将代码编写为:

from pathlib import Path
here = Path(__file__)
with (here/"some_file.txt").open() as f:
    print(f.read())

我使用 pathlib 来避免路径连接的跨平台问题:否则使用 os.path.join

【讨论】:

以上是关于如何从模块外部读取与 __main__.py 相同模块中包含的文件?的主要内容,如果未能解决你的问题,请参考以下文章

2016py学习笔记:模块/

如何在 Python 中获取 __main__ 模块的文件名?

python导入模块

import包和模块_2

if __name__ =="__main__"

如何使用 gunicorn 运行模块?