如何在具有相对路径的父python文件中调用文件?

时间:2018-11-15 09:11:20

标签: python

就这样diagram

当我在“ cudamat.py”或“ eignmat.py”中导入模块时。我遇到了“找不到文件问题” 。实际上,在这两个文件中,作者使用相对路径来处理“ libeigenmat.so”

with open("libeigenmat.so", 'r') as file:
     file.read()

但是当我运行“ Run _ *。py”时,我在子文件夹中,因此python解释器找不到“ libeigenmat.so”。

那么,你们可以帮我解决这个问题吗?如何在相对路径中通过文件操作调用父方法?更具体地说,如何更改 eignmat.py cudamat.py 以使这两个文件在任意路径下可用?

谢谢

4 个答案:

答案 0 :(得分:0)

您可以使用.符号来表示层次结构中的更高目录,在文件路径的开头放置一个.,但是引用的是“该文件所在的文件夹”,因此从父目录获取文件,您将使用..

with open("../libeigenmat.so", 'r') as file:
     file.read()

答案 1 :(得分:0)

run命令实际上应该始终从项目的根目录调用。同样,您应该将具有可导入函数的脚本包装到package中。有多种方法可以做到这一点,例如使用sys.path.append或使用相对导入,但是如果您是Python如何处理导入的初学者,那么实际上这是要遵循的两个很好的经验法则。实际上,即使您不是初学者,这也是一个好习惯

按如下所示重组您的项目:

parent\
   run.py
   my_package\
       eigenmat.py
       cudamat.py
       __init__.py

__init__.py告诉Python将其所在的文件夹限制为可导入模块的内容。在run.py中,使用语句from my_package import eigenmatfrom my_package import cudamat。您也可以使用完全相同的语句在eigenmat.pycudamat.py之间导入。

答案 2 :(得分:0)

您可以使用os.getcwd()来获取当前的工作目录,并使用os.path.join()来构建文件的路径,以便只要您从以下位置执行代码,它就始终可以找到文件的正确路径。基本目录。

import os


with open(os.path.join(os.getcwd(),'libeigenmat.so'), 'r') as file:
     file.read()

答案 3 :(得分:0)

  

更具体地说,如何更改eignmat.py或cudamat.py,以使这两个文件在任意路径中可用?

首先获取绝对路径,然后将其与文件结合使用即可。

import os

file_path = os.path.abspath(os.path.dirname(__file__)).replace('\\', '/')

with open(os.path.join(file_path, "libeigenmat.so"), 'r') as file:
    a = file.read()