如何为变量分配模块名称?

Joh*_*ing -1 python import module python-2.7

我想动态地让用户选择他/她想要使用的数据体.为此,在用户识别出他们选择的"语料库"之后,我必须导入适当的语料库.(我在Python 2.7.3上运行)

corpora_ls = ["gutenberg","inaugural","movie_reviews","state_union"]
import_validation = False

while not import_validation:
    print "Corpora Options: \"gutenberg\", \"inaugural\", \"movie_reviews\", \"state_union\"."
    import_option = str(raw_input("What corpus would you like to import? "))

    if import_option in corpora_ls:
        import_validation = True

        if import_option == "gutenberg":
            fname = "gutenberg"
            from nltk.corpus import gutenberg as DATA
        elif import_option == "inaugural":
            fname = "inaugural"
            from nltk.corpus import inaugural as DATA
        elif import_option == "movie_reviews":
            fname = "movie_reviews"
            from nltk.corpus import movie_reviews as DATA
        elif import_option == "state_union":
            fname = "state_union"
            from nltk.corpus import state_union as DATA
    else:
        print "Please enter one of the available corpora as listed.\n"
Run Code Online (Sandbox Code Playgroud)

坦率地说,这段代码看起来很麻烦.我希望能够简单地说一下:

if import_option == "gutenberg":
    fname = "gutenberg"
elif import_option == "inaugural":
    fname = "inaugural"

   etc....

from nltk.corpus import import_option as DATA
Run Code Online (Sandbox Code Playgroud)

而不是必须from nltk.corpus...etc.为每个人分开if/elif

这样的事情可能吗?

谢谢您的帮助!

ick*_*fay 5

是.你可以使用getattr:

import nltk.corpus
corpus_data = getattr(nltk.corpus, corpus_name)
Run Code Online (Sandbox Code Playgroud)