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

How to read a file contained in same module as __main__.py from outside the module?

这是我的文件树:

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'

我该如何解决这个问题?

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

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

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