将两个python与共享相同代码的语句结合使用

q09*_*987 3 python python-3.5

def test(file_name):
    if file_name.lower().endswith('.gz'):
        with gzip.open(file_name) as f:
            f_csv = csv.reader(i.TextIOWrapper(f))
            #### Same Code

    if file_name.lower().endswith('.csv'):
        with open(file_name) as f:
            f_csv = csv.reader(i.TextIOWrapper(f))
            #### Same Code
Run Code Online (Sandbox Code Playgroud)

问题>有没有更好的方法来组合上面的代码而不重复"相同代码"部分?该函数test使用gzip.open,如果它file_name是一个gz文件,否则它会以常规方式打开open.

fre*_*ish 8

一种方法是:

def test(file_name):
    loader = None
    if file_name.lower().endswith('.gz'):
        loader = gzip.open
    elif file_name.lower().endswith('.csv'):
        loader = open

    if loader is not None:
        with loader(file_name) as f:
            f_csv = csv.reader(i.TextIOWrapper(f))
            #### Same Code
Run Code Online (Sandbox Code Playgroud)