根据文件扩展名自动选择文件处理程序

时间:2017-01-20 08:44:09

标签: python python-3.x

这就是我的看法:

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 个答案:

答案 0 :(得分:2)

这是我首选的pythonic方式:

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 :(得分: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