导入模块以相对于导入它的文件执行文件操作



我正在尝试构建一个函数,该函数将熊猫dataframe保存到csv,并保存调用它的python脚本的副本。

我希望该函数获取调用它的文件的位置。 所以我创建了以下文件:

functions.py:

def full_save():
    filePath = os.path.abspath('')
    currentFileDir = os.path.join(filePath, os.path.basename(__file__))
    print(currentFileDir)

从另一个文件导入并调用该函数:

foo.py:

from functions import *
full_save()

我得到了functions.py的目录,而不是foo.py.

我想得到"/somelocation/foo.py",但我得到了"/modulelocation/functions.py".

您可以返回调用堆栈并访问调用方的全局变量。

functions.py:

import sys
def full_save():
    namespace = sys._getframe(1).f_globals  # Caller's globals.
    print(f'namespace["__file__"]: {namespace["__file__"]!r}')

最新更新