Python-装饰器-案例-获取文件列表

import os


def get_file_path(fun):
    '''装饰器:获取全路径文件名。如:D:/tmp/12.txt
    :param fun:
    :return:file_path_list  全路径文件名列表
    '''

    def inner(r):
        # print("获取全路径文件名")
        file_name_list = fun(r)
        file_path_list = []
        for file in file_name_list:
            path_file = refer_path + os.sep + file
            file_path_list.append(path_file)
        return file_path_list

    return inner


def get_file_pdf(fun):
    '''装饰器。功能:获取后缀为pdf、PDF的文件名列表
    :param fun:
    :return: file_pdf_list后缀为pdf、PDF的文件名列表
    '''

    def inner(r):
        # print("只获取后缀为.pdf的文件名列表")
        file_name_list = fun(r)
        file_pdf_list = []
        for file in file_name_list:
            ext = os.path.splitext(file)[1]
            if ext.lower() == '.pdf':  # 判断后缀是否为.pdf、.PDF
                file_pdf_list.append(file)
        return file_pdf_list

    return inner


def get_file_only(fun):
    '''装饰器。功能:只获取列表中的文件名。不含文件夹。如:1.txt、123.pdf
    :param fun:
    :return: file_name_only_list 只有文件名,不含文件夹的列表
    '''

    def inner(r):
        # print("只获取文件名,不含文件夹")
        file_name_list = fun(r)
        # 只获取文件名,不含文件夹列表。如:1.txt、123.pdf
        file_name_only_list = []
        for file in file_name_list:
            if os.path.isfile(file):  # 判断是否为文件(非文件夹)
                file_name_only_list.append(file)
        return file_name_only_list

    return inner


# 巧用装饰器做过滤条件
@get_file_path  # 只获取全路径文件列表。如:[D:\tmp\123.pdf]
@get_file_pdf  # 只获取pdf后缀列表。如:[123.pdf]
@get_file_only  # 只获取文件列表,不含文件夹。如:[a、b、1.txt、123.pdf]
def get_file_list(refer_path):
    '''获取指定路径下的所有文件列表(含文件夹)。如:a、b、1.txt、123.pdf
    :param refer_path: 指定存放文件的路径
    :return:路径下的所有文件名
    '''
    file_name_list = os.listdir(refer_path)
    return file_name_list


if __name__ == '__main__':
    # 指定路径
    refer_path = r'D:\tmp'
    # 文件名称列表
    file_name_list = get_file_list(refer_path)
    print(file_name_list)

  

猜你喜欢

转载自www.cnblogs.com/andy9468/p/9996464.html