Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在其他模块中使用的类中打开时的文件位置_Python_Python 3.x - Fatal编程技术网

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我刚从我当前目录中的包访问了一个模块。查看更多对不起,它不起作用。。。已尝试从哺乳动物中执行bot
wolf=wolf.wolf()
wolf=wolf()
@parser
。wolf导入wolf
也可以。如果没有,则肯定存在其他问题。该包确实被访问。如果我将
print(“inside Wolf”)
设置为
Wolf.py
中的第一行,那么当从
Zoo
运行时,它会打印它,但是当它尝试
Wolf=Wolf()
时,它会打印
FileNotFoundError:[Errno 2]没有这样的文件或目录:“wolfname.txt”