Python:在其他模块中使用的类中打开时的文件位置
假设我有这样一个文件结构:Python:在其他模块中使用的类中打开时的文件位置,python,python-3.x,Python,Python 3.x,假设我有这样一个文件结构: test mammals Wolf.py wolfname.txt Zoo.py 在Wolf.py中,我有: class Wolf: def __init__(self): with open('wolfname.txt', 'r') as fileobj: self.name = fileobj.read() print(self.name) wolf
test
mammals
Wolf.py
wolfname.txt
Zoo.py
在Wolf.py中,我有:
class Wolf:
def __init__(self):
with open('wolfname.txt', 'r') as fileobj:
self.name = fileobj.read()
print(self.name)
wolf = Wolf()
如果我从内部调用它Wolf.py
,它工作正常。如果我从Zoo.py
内部调用它,它会给出一个FFileNotFoundError:[Errno 2]没有这样的文件或目录:“wolfname.txt”
错误
如何在不解析为绝对路径的情况下修复它?将来我可能还想使用其他新包中的Wolf
类
我在动物园内使用此导入:
from mammals.Wolf import Wolf
wolf = Wolf()
编辑:我制作了此repl.it以在线显示:尝试将“wolf.py”文件或wolf类名重命名为其他名称 它可能会解决
FileNotFoundError
,因为名称相同
否则:也许会帮你解决问题?相反;这样做:
from mammals import Wolf
然后您可以通过
Wolf访问Wolf类。Wolf
我使用了以下方法:
class Wolf:
def __init__(self, path = ''):
with open(path + 'wolfname.txt', 'r') as fileobj:
self.name = fileobj.read()
print(self.name)
在动物园:
from mammals import Wolf
print("inside Main.py")
wolf = Wolf.Wolf("mammals/")
因此,在不同的文件中,我可以传递不同的相对路径。这是否回答了您的问题?你尝试了什么相对路径?如果哺乳动物与Zoo.py位于同一文件夹中,则来自Zoo.py的路径应为哺乳动物/wolfname。txt@PierreV. <代码>导入os os.path.dirname(os.path.abspath(_文件__))会告诉我动物园的位置,不是吗
C://…/ProjectRoot/
(我将来还想在Linux上运行这个程序)。然而,如果s.endsWith(“ProjectRoot”):转到哺乳动物,我必须硬编码类似于?然后,如果我想在10个其他模块中使用Wolf
,每个模块位于不同的文件夹中。。。然后呢?谢谢你,这起作用了:导入哺乳动物
然后wolf=wolf.wolf()
@parser我刚从我当前目录中的包访问了一个模块。查看更多对不起,它不起作用。。。已尝试从哺乳动物中执行botwolf=wolf.wolf()
和wolf=wolf()
@parser。wolf导入wolf
也可以。如果没有,则肯定存在其他问题。该包确实被访问。如果我将print(“inside Wolf”)
设置为Wolf.py
中的第一行,那么当从Zoo
运行时,它会打印它,但是当它尝试Wolf=Wolf()
时,它会打印FileNotFoundError:[Errno 2]没有这样的文件或目录:“wolfname.txt”