2012-07-01 69 views
2

導入類的完整模塊路徑我有方法,返回給定的類名稱的模塊路徑如何找到在其他文件

def findModulePath(path, className): 
    attributes = [] 
    for root, dirs, files in os.walk(path): 
     for source in (s for s in files if s.endswith(".py")): 
      name = os.path.splitext(os.path.basename(source))[0] 
      full_name = os.path.splitext(source)[0].replace(os.path.sep, '.') 
      m = imp.load_module(full_name, *imp.find_module(name, [root])) 
      try: 
       attr = getattr(m, className) 
       attributes.append(attr) 
      #    if "." in attr.__module__: 
      #     return 

      except: 
       pass 
    if len(attributes) <= 0: 
     raise Exception, "Class %s not found" % className 

    for element in attributes: 
     print "%s.%s" % (element.__module__, className) 

,但它不返回該模塊的完整路徑, 例如我在對象包中有一個名爲「objectmodel」的python文件,它包含一個Model類,所以我調用findModulePath(MyProjectPath,「Model」)。它打印objectmodel.Model,但我需要objects.objectmodel.Model

+0

我已經替換__file__中的基礎包路徑,然後替換/ with。 – Pooya

回答

2

您正在尋找的屬性是__file__。注意您可能必須要在自己後,要做到這一點值的一些按摩 - 它可能是一個.py.pyc.pyd.so.dll

當然,它也將是一個完整的路徑,但你必須您可以減去您的根,以獲得您關心的實際層次結構。

+0

非常感謝您的評論,我解決了它 – Pooya

相關問題