获取调用者文件的绝对路径

6
假设我有两个在不同目录下的文件: 1.py (例如在C:/FIRST_FOLDER/1.py) 和 2.py (例如在C:/SECOND_FOLDER/2.py)。

文件1.py通过sys.path.insert(0, #path_of_2.py) (然后是import 2)导入了2.py并调用了其中的一个函数,它所调用的函数需要知道1.py的绝对路径(它会在相同的目录中寻找一个文件)。

我知道有inspect.stack()[1]但它只返回文件名而不是路径。

怎样去实现呢?


4
也许你应该重新组织你的代码并改善逻辑,使其不依赖于要读取的文件与程序在同一目录下的假设。 - user5547025
请注意,不能导入文件名为2.y这样的Python文件,因为2不是有效的标识符,因此import 2将导致SyntaxError: invalid syntax - martineau
2个回答

10
import inspect
import os

abs_path = os.path.abspath((inspect.stack()[0])[1])
directory_of_1py = os.path.dirname(abs_path)

如需了解有关模块os.path的更多信息,请参考该链接。


9
至少在Python 3.8.5中,inspect.stack()[0][1]会给出函数所在文件的路径;inspect.stack()[1][1]会给出调用者文件的路径。 - Elenchus

4

要返回Python文件的绝对路径,请使用Python的__file__属性:

import os
path = os.path.abspath(__file__)

真的有效!我知道abspath()函数,但不知道它在这种情况下会起作用,我想知道这个函数是如何工作的,假设操作系统中有多个同名文件。 - Jonathan
7
@Jonathan:这并不会给出 调用者 文件的绝对路径。 - martineau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接