目录结构:
├--- mod
| ├--- __init__.py
| └--- abc.data
└--- test.py
__ init __。py:
with open("abc.data", 'r') as f:
pass # read and process the data
test.py:
import mod
上面的程序应该读取文件abc.data
中的数据,但是它给出了错误:
FileNotFoundError: [Errno 2] No such file or directory: 'abc.data'
这是因为Python解释器的当前目录是test.py
的父目录。
那么无论abc.data
的位置如何,如何在模块mod
中读取test.py
?
实际上,以下代码有效:
__ init __。py:
import os
filepath = os.path.join(os.path.dirname(os.path.realpath(__file__)), "abc.data")
with open(filepath, 'r') as f:
pass # read and process the data
但是该解决方案有点脏,尤其是当要在__init__.py
中读取许多文件时。有更优雅的解决方案吗?
答案 0 :(得分:0)
我认为这是最好的。甚至更大的库也使用相同的方法:
payload == null
另一个例子:
# Extracted From selenium/webdriver/firefox/firefox_profile.py
# ...
if not FirefoxProfile.DEFAULT_PREFERENCES:
with open(os.path.join(os.path.dirname(__file__),
WEBDRIVER_PREFERENCES)) as default_prefs:
FirefoxProfile.DEFAULT_PREFERENCES = json.load(default_prefs)
# ...
如果它是可导入的对象(例如# Extracted from pipenv/vendor/yaspin/spinners.py
# ...
THIS_DIR = os.path.dirname(os.path.realpath(__file__))
SPINNERS_PATH = os.path.join(THIS_DIR, "data/spinners.json")
# ...
文件),则可以使用.py
约定来表示相对路径。