2017-01-20 155 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

对不起,我的坏:( –