如何在文件浏览器中使用动态模块?

时间:2016-05-13 18:58:14

标签: python python-3.x dynamic tkinter module

基本上当我的程序运行时,我希望它能够提供一个文件浏览器,我可以在其中选择一个python程序,它将作为模块导入。这就是我到目前为止所做的:

from tkinter import Tk
from tkinter.filedialog import askopenfilename

Tk().withdraw()

x = askopenfilename()

print(x)

#g = __import__(x)

问题是这会抓取文件的整个路径,而不仅仅是文件名。即使它只抓取文件名,我也必须从最后删除.py。

所以基本上我的问题是,是否有更简单的方法来实现我想要的?如果没有,那么如何剥离所有路径信息和文件扩展名,只留下模块名称?

要添加一些上下文,这个程序最终会做的是我们一个电表进行电压测量,但我希望它可以互换我使用的仪表。由于每个仪表的通信方式不同,我想在自己的文件中写下每个仪表的所有命令,并在每次运行时选择我想要使用的仪表。不,我不只是想输入模块的名称,我希望能够浏览它。

1 个答案:

答案 0 :(得分:3)

os.path包含您需要的一切。

from tkinter import Tk
from tkinter.filedialog import askopenfilename
from os.path import basename, splitext

Tk().withdraw()

path = askopenfilename()
file = basename(path)
(filename, fileextension) = splitext(file)

print(filename)