2014-09-25 77 views
0

我编写了一个程序,它将文件夹内的所有文件编码为字符串,并将其作为字典写入pyfile。从名称在变量中的模块导入字典

要创建的py文件的名称与路径一起给出,字典是通过向其名称添加“= data”来创建的。例如:

pyfilename = "images.py" 

然后将带有图像的字典写入此文件中作为imagesdata

现在我需要解码以此方式编码的任何py文件。

我只给出一个变量中的py文件的名称,程序从此获取所有其他名称,并从给定名称的正确模块中导入正确的字典。示例代码如下。

name2decode = images.py 
dictname = name2decode + "data" 

程序应该做

from name2decode import dictname 

其中name2decodedictnames是变量。我尝试使用__import__("name2decode.dictname")语法,但出于某种原因,这不起作用。也许我的语法错了。

这怎么办?

+1

'name2decode = images.py' - 不应该是'name2decode =“images.py”'? *“不起作用”*表示 - 如果出现错误,请提供完整的回溯。 – jonrsharpe 2014-09-25 09:38:47

回答

1

导入模块的名称,然后使用getattr()从该得到Dictionary对象:

import importlib 
import os.path 

name2decode = os.path.splitext(name2decode)[0] 
module = importlib.import_module(name2decode) 
dictionary = getattr(module, dictname) 

请注意,您在导入时需要删除.py扩展!

+0

可以请你解释一下line2decode = os.path.splitext(name2decode)[0]? splittext和[0]是做什么的? – wookie 2014-09-25 17:21:06

+0

@wookie:['os.path.splitext()'](https://docs.python.org/2/library/os.path.html#os.path.splitext)将文件名拆分为一个基本名和扩展名元组和['0]'只选择基本部分。它给你'images.py'的'images'部分。 – 2014-09-25 17:28:59

+0

谢谢。如果我知道我在这里寻找的文件的文件扩展名,例如。 “images.py”我可以使用name2decode =文件名[: - 3]这将放弃“.py”的一部分,并给“图像”的一部分? – wookie 2014-09-25 17:58:25

相关问题