我有一个基本但令人讨厌的文件读取问题。
我有一个像这样设置的回购:
/repo/functions/feature.py
/script.sql
/repo/notebooks/task.ipynb
在feature.py
中,我有一个读取script.sql
并根据一些输入对其进行修改的函数。将此函数导入到/functions
目录中的笔记本中效果良好。
然而,当我在不同的目录/notebooks
中有一个笔记本task.ipynb
时,函数现在给出一个";找不到文件";错误如果我将.sql文件移到/notebooks
,它就会再次工作,但这还远远不够理想。我还考虑过将所有静态文件合并到一个目录中,但这很烦人。
有没有一种方法可以正确地路由文件路径查找,使其始终发生在输入的位置,而不管函数本身是在哪里导入和调用的?
这就是您想要的:stackoverflow线程。
您可以在feature.py中使用__file__
关键字来访问feature.py所在的目录。然后,如果script.sql始终与feature.py.在同一目录中,则可以可靠地构建到script.sql的路径
我会给spatzlsberger一个答案奖,因为他确实为我指出了如何制作一个"总是相对于当前模块";文件路径?
这个答案对我来说很有效。利用pathlib并像这样修改文件路径。
from pathlib import Path
here = Path(__file__).parent
fname = here/'script.sql'