如何从模块外部读取与 __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
.
这是我的文件树:
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
.