2013-04-12 5 views
-1

사용자가 작업 할 데이터 본문을 동적으로 선택하게하고 싶습니다. 이를 위해, 사용자가 자신의 "코퍼스"를 선택하고 나면 해당 코퍼스를 가져와야합니다.모듈 이름을 변수에 할당하는 방법은 무엇입니까?

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" 

는 솔직히,이 코드는 나에게 성가신 보인다 (파이썬 2.7.3에서 실행하고 있습니다). 단순히의 효과에 뭔가 말할 수 있도록하고 싶습니다이 가능한 같은 것을 오히려 모든 if/elif

에 대해 별도의 from nltk.corpus...etc.을하는 것보다

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

    etc.... 

from nltk.corpus import import_option as DATA 

있습니까?

도움 주셔서 감사합니다.

+2

가에서보세요 ['importlib.import_module'] (http://docs.python.org/2/library/importlib.html#importlib.import_module) 및/또는 [ '__import__' 함수] (http://docs.python.org/2/library/functions.html#__import__)를 참조하십시오. – BrenBarn

답변

5

예. 당신은 getattr를 사용할 수 있습니다

import nltk.corpus 
corpus_data = getattr(nltk.corpus, corpus_name) 
+0

이것은 작동하지 않습니다 ... – Jared

+0

@ Jared : 모듈이라고 가정합니다. 잘못된 가정이었습니다. 이제는 그것이 nltk.corpus 모듈의 속성 일뿐입니다. 내 대답을 편집했습니다. – icktoofay

+0

감사합니다. 당신의 도움에 감사드립니다. 위는 완벽하게 작동합니다. – JohnZ

관련 문제