2017-07-10 38 views
0

我有一個Python文件,它是一個集合functionsclassesmethods等我需要解析它,這樣我就可以提取出指定functionsclasses包括我需要的壓倒他們的目的methods我可以將選定的python函數和類方法從一個文件複製到另一個文件嗎?

是否有parser可以解析python這樣的需求的代碼?內置的ast模塊能幫助我嗎?

例如:

輸入:Main.py

def f_one(): 
    """ 
    """ 
    pass 

class c_one(): 
    """ 
    """ 
    def m_one(): 
    """ 
    """ 
    pass 

    def m_two(): 
    """ 
    """ 
    pass 
    def m_three(): 
    """ 
    """ 
    pass 

class c_two(): 
    def m_one(): 
    """ 
    """ 
    pass 

目標是對面f_onec_onem_one複製,更一般我指定的代碼(函數,類等)。

輸出:Copy.py

def f_one(): 
    """ 
    """ 
    pass 

class c_one(): 
    """ 
    """ 
    def m_one(): 
    """ 
    """ 
    pass 
+1

你的意思是'import'? –

+0

不,我只是試圖自動化我通常做的複製粘貼工作。我剛剛描述瞭如何複製粘貼:-) – Nishant

+0

所以,你只是想提取Main.py中每個類和函數的名稱? – Toterich

回答

1

您可以使用inspect.getsource()

import inspect 
import Main 

objects = [Main.f_one, Main.c_one] 

copy = '' 

#copy objects 
for obj in objects: 
    copy += inspect.getsource(obj) 
    copy += '\n' 

with open('Copy.py', 'w') as out: 
    out.write(copy) 

這寫的f_one完整的源代碼和c_one複製到Copy.py.如果您只需要c_one的部分內容,則必須檢查所有您想單獨使用的成員(例如inspect.getsource(Main.c_one.m_one))並手動組裝它們。

您還可以使用inspect.getsourcelines()逐行獲取對象的源代碼(例如,如果只需要標頭)。

請注意,從編譯文件導入顯然是不可能的。

+0

這是一個不錯的選擇。我想知道是否可以使用「ast」。 – Nishant

1

你只需要導入它:

from Main import f_one, c_one 

c = c_one() 
c.m_two() 
相關問題