2017-01-20 151 views
0

文件處理程序的自動選擇這是我怎麼看它:根據文件擴展名

class BaseHandler: 
    def open(self): pass 
    def close(self): pass 

class TXTHandler(BaseHandler): 
    def open(self): pass 
    def close(self): pass 

class XMLHandler(BaseHandler): 
    def open(self): pass 
    def close(self): pass 

def open_file(file_path): 
    handler = BaseHandler(file_path) 

例如,如果FILE_PATH是「.. \ file.xml」必須返回XMLHandler。 任何人都可以請告訴我,我需要做什麼來實現這個功能?

我知道我可以通過if-elif-else語句來實現,但我試圖避免一打elif。

回答

2

這是我的優選Python的方式:

import os 
handlers = {'.xml': XMLHandler, '.txt': TxtHandler} 

def open_file(file_path): 
    ext = os.path.splitext(file_path)[1] 
    handler = handlers.get(ext, BaseHandler) 

在上面的代碼我處理程序與使用字典擴展關聯。

open_file函數中,我提取擴展並使用它從字典中獲取處理函數,並考慮密鑰不存在的情況。

我也能做到這一點,像這樣:

if ext in handlers: 
    handler = handlers[ext] 
else: 
    handler = BaseHandler 

使用字典的get方法當然是,但更好!

1

您可以根據文件類型,例如通過檢查如下所示的擴展名:Checking file extension 選擇合適的處理程序類。

東西沿着這些線路:

def open_file(file_path): 
    if file_path.lower().endswith('.txt'): 
     handler = TxtHandler(file_path) 
    elif file_path.lower().endswith('.xml'): 
     handler = XMLHandler(file_path) 
    else: 
     handler = BaseHandler(file_path) #or error 
+0

感謝您的及時回覆。我知道我可以通過if-elif-else語句實現這一點,但我試圖避免一打elif。 –

+0

請下次以這種方式形成你的問題。 – snow

+0

對不起,我的壞:( –