1. import os
  2.  
  3. def get_all_path(fun):
  4. '''装饰器。功能:获取全路径文件名。如:D:/tmp/12.txt
  5. :param fun:
  6. :return:file_path_list 全路径文件名列表
  7. '''
  8.  
  9. def inner(r):
  10. # print("获取全路径文件名")
  11. file_name_list = fun(r)
  12. file_path_list = []
  13. for file in file_name_list:
  14. path_file = refer_path + os.sep + file
  15. file_path_list.append(path_file)
  16. return file_path_list
  17.  
  18. return inner
  19.  
  20. def get_pdf(fun):
  21. '''装饰器。功能:获取后缀为pdf、PDF的文件名列表
  22. :param fun:
  23. :return: file_pdf_list后缀为pdf、PDF的文件名列表
  24. '''
  25.  
  26. def inner(r):
  27. # print("获取后缀为.pdf的文件名列表")
  28. file_name_list = fun(r)
  29. file_pdf_list = []
  30. for file in file_name_list:
  31. ext = os.path.splitext(file)[1]
  32. if ext.lower() == '.pdf': # 判断后缀是否为.pdf、.PDF
  33. file_pdf_list.append(file)
  34. return file_pdf_list
  35.  
  36. return inner
  37.  
  38. def get_suffix_out(suf="txt"):
  39. '''装饰器。功能:获取后缀为指定后缀(suf)的文件名列表
  40. :param suf:指定后缀,如:txt、jpg
  41. :return:suf_list符合指定后缀的文件列表
  42. '''
  43.  
  44. def get_suffix(fun):
  45. def inner(*args, **kwargs):
  46. # print("inner 后缀限制是:", suf)
  47. # # print("获取后缀为.pdf的文件名列表")
  48. file_name_list = fun(*args, **kwargs)
  49. suf_list = []
  50. for file in file_name_list:
  51. src_suf = os.path.splitext(file)[1] # 获取文件的后缀,如:.pdf、.txt
  52. if src_suf.lower() == '.' + str(suf).lower(): # 判断后缀是否为.suf、.SUF
  53. suf_list.append(file)
  54. return suf_list
  55.  
  56. return inner
  57.  
  58. return get_suffix
  59.  
  60. def get_papers_only(fun):
  61. '''装饰器。功能:只获取列表中的文件名。不含文件夹。如:1.txt、123.pdf
  62. :param fun:
  63. :return: file_name_only_list 只有文件名,不含文件夹的列表
  64. '''
  65.  
  66. def inner(r):
  67. # print("只获取文件名,不含文件夹")
  68. file_name_list = fun(r)
  69. # 只获取文件名,不含文件夹列表。如:1.txt、123.pdf
  70. file_name_only_list = []
  71. for file in file_name_list:
  72. if os.path.isabs(file): # 1、如果为绝对路径,r表示绝对路径全路径列表
  73. if not os.path.exists(file): # 检查全路径的有效性
  74. print("路径不存在")
  75. exit()
  76. if os.path.isfile(file): # 判断是否为文件(非文件夹)
  77. file_name_only_list.append(file)
  78. else: # 2、如果为相对路径,r表示相对路径统一路径字符串
  79. path_file = r + os.sep + file
  80. if not os.path.exists(path_file): # 检查全路径的有效性
  81. print("路径不存在")
  82. exit()
  83. if os.path.isfile(path_file): # 判断是否为文件(非文件夹)
  84. file_name_only_list.append(file)
  85. return file_name_only_list
  86.  
  87. return inner
  88.  
  89. # 巧用装饰器做过滤条件
  90. @get_all_path # 获取全路径文件列表。如:[D:\tmp\123.pdf]
  91. @get_pdf # 获取pdf后缀列表。如:[123.pdf]
  92. @get_papers_only # 只获取文件列表,不含文件夹。如:[a、b、1.txt、123.pdf]
  93. def get_list(refer_path):
  94. '''获取指定路径下的所有文件列表(含文件夹)。如:a、b、1.txt、123.pdf
  95. :param refer_path: 指定存放文件的路径
  96. :return:路径下的所有文件名
  97. '''
  98. try:
  99. file_name_list = os.listdir(refer_path)
  100. return file_name_list
  101. except Exception as e:
  102. print(e)
  103. exit()
  104.  
  105. @get_papers_only # 只获取文件列表,不含文件夹。如:[a、b、1.txt、123.pdf]
  106. @get_suffix_out("txt") # 只获取txt后缀列表。如:[D:\tmp\123.txt]
  107. # @get_pdf # 只获取pdf后缀列表。如:[D:\tmp\123.pdf]
  108. def all_path(all_path_list):
  109. return all_path_list
  110.  
  111. if __name__ == '__main__':
  112. # 指定路径
  113. refer_path = r'D:\tmp'
  114. # 文件名称列表
  115. file_name_list = get_list(refer_path)
  116. print(file_name_list)
  117.  
  118. path_list = ['D:\\tmp\\123.PDF',
  119. 'D:\\tmp\\combinedminutes.txt',
  120. 'D:\\tmp\\mark.pdf',
  121. 'D:\\tmp\\meetingminutes.ps',
  122. 'D:\\tmp\\meetingminutes2.123',
  123. 'D:\\tmp\\rotatedpage.pdf',
  124. 'D:\\tmp\\watermarkedCover.pdf']
  125.  
  126. print(path_list)
  127. pdf_list = all_path(path_list)
  128. print(pdf_list)

==================优美的分割线==================

装饰器学习案例:

例子1:简单装饰器

  1. def check(fun):
  2. def inner():
  3. print("权限检查--1")
  4. fun()
  5.  
  6. return inner
  7.  
  8. @check
  9. def foo1():
  10. print("查看用户信息")
  11.  
  12. if __name__ == '__main__':
  13. foo1()

例子2:被装饰函数待有参数的装饰器

  1. def check(fun):
  2. def inner(*args, **kwargs):
  3. print("权限检查--1")
  4. fun(*args, **kwargs)
  5.  
  6. return inner
  7.  
  8. @check
  9. def foo1():
  10. print("查看用户信息")
  11.  
  12. if __name__ == '__main__':
  13. foo1()

例子3:装饰器带参数的装饰器

  1. def check_out(who):
  2. def check(fun):
  3. def inner(*args, **kwargs):
  4. print("权限检查--1,部门时:%s" % who)
  5. fun(*args, **kwargs)
  6.  
  7. return inner
  8.  
  9. return check
  10.  
  11. @check_out("天猫")
  12. def foo1(a, b):
  13. print("查看用户信息%s" % (a + b))
  14.  
  15. @check_out("闲鱼")
  16. def foo2(a, b, c):
  17. print("查看用户信息%s" % (a + b + c))
  18.  
  19. if __name__ == '__main__':
  20. foo1(1, 2)
  21. foo2(1, 2,3)

例子4:类语法版本的装饰器

  1. class MyClass(object):
  2. def __init__(self, fun):
  3. print('__init__函数:fun=', fun)
  4. self.fun = fun
  5.  
  6. def __call__(self, *args, **kwargs):
  7. print("验证权限")
  8. return self.fun(*args, **kwargs)
  9.  
  10. @MyClass
  11. def foo1(a, b):
  12. print("%s + %s = %s" % (a, b, (a + b)))
  13.  
  14. if __name__ == '__main__':
  15. foo1(1,2)

例子5:文档恢复为被装饰器的文档的装饰器

  1. import functools
  2.  
  3. def check(fun):
  4. """检查权限的装饰器"""
  5. @functools.wraps(fun)
  6. def inner(*args, **kwargs):
  7. """这里是闭包函数"""
  8. print("权限检查--1")
  9. fun(*args, **kwargs)
  10.  
  11. return inner
  12.  
  13. @check
  14. def foo1():
  15. '''这里是原始函数foo1的说明文档'''
  16. print("查看用户信息")
  17.  
  18. if __name__ == '__main__':
  19. print(foo1.__doc__)

参考:https://www.cnblogs.com/andy9468/p/11137417.html

Python-装饰器-案例-获取文件列表的更多相关文章

  1. python装饰器内获取函数有用信息方法

    装饰器内获取函数有用信息方法 .__doc__用于得到函数注释信息 .__name_用于得到函数名 在函数引用装饰器的时候,函数名会变为装饰器内部执行该函数的名字,所有在直接执行函数名加.__doc_ ...

  2. 简学Python第四章__装饰器、迭代器、列表生成式

    Python第四章__装饰器.迭代器 欢迎加入Linux_Python学习群  群号:478616847 目录: 列表生成式 生成器 迭代器 单层装饰器(无参) 多层装饰器(有参) 冒泡算法 代码开发 ...

  3. python——获取文件列表

    """-------------------------------------------------------- <<获取文件列表>> () ...

  4. [python 基础]python装饰器(一)添加functools获取原函数信息以及functools.partial分析

    python装饰器学习的时候有两点需要注意一下 1,被装饰器装饰的函数取其func.__name__和func.func_doc的时候得到的不是被修饰函数的相关信息而是装饰器wrapper函数的doc ...

  5. python 装饰器、递归原理、模块导入方式

    1.装饰器原理 def f1(arg): print '验证' arg() def func(): print ' #.将被调用函数封装到另外一个函数 func = f1(func) #.对原函数重新 ...

  6. Python 装饰器入门(上)

    翻译前想说的话: 这是一篇介绍python装饰器的文章,对比之前看到的类似介绍装饰器的文章,个人认为无人可出其右,文章由浅到深,由函数介绍到装饰器的高级应用,每个介绍必有例子说明.文章太长,看完原文后 ...

  7. python 装饰器 一篇就能讲清楚

    装饰器一直是我们学习python难以理解并且纠结的问题,想要弄明白装饰器,必须理解一下函数式编程概念,并且对python中函数调用语法中的特性有所了解,使用装饰器非常简单,但是写装饰器却很复杂.为了讲 ...

  8. Python高级特性: 12步轻松搞定Python装饰器

    12步轻松搞定Python装饰器 通过 Python 装饰器实现DRY(不重复代码)原则:  http://python.jobbole.com/84151/   基本上一开始很难搞定python的装 ...

  9. 装饰模式和python装饰器

    装饰器和装饰模式 先给出两者的定义: - 装饰器:装饰器是一个非常著名的设计模式,常常被用于有切面需求的场景.较为经典的有插入日志.性能測试.事务处理等. 装饰器是解决这类问题的绝佳设计.有了装饰器, ...

随机推荐

  1. C# CRC16 查表法

    private static ushort[] crctab = new ushort[256]{                      0x0000, 0x1021, 0x2042, 0x306 ...

  2. day15<集合框架>

    集合框架(对象数组的概述和使用) 集合框架(集合的由来及集合继承体系图) 集合框架(Collection集合的基本功能测试) 集合框架(集合的遍历之集合转数组遍历) 集合框架(Collection集合 ...

  3. Runtime应用(三)实现NSCoding的自动归档和自动解档

    当我们需要将一个对象进行归档时,都要让该对象的类遵守NSCoding协议,再实现归档和接档方法.例如有一个Person类,该类有两个成员变量 @property (nonatomic,copy) NS ...

  4. my97datepicker 怎么设置页面加载时默认值为当天时间

    Demo示例如下:<script language="javascript" type="text/javascript" src="My97D ...

  5. 阿里大于短信返回XML

    返回异常和成功的两种不同,XML返回直接拿alibaba_aliqin_fc_sms_num_send_response判断节点是否有这个名字 官方API地址: https://api.alidayu ...

  6. Uni2D —— 入门(全)

    Uni2D 入门 Uni2D 入门 -- Atlas Uni2D 入门 -- Animation Clip 和 Animation API Uni2D 入门 -- Skeletal Animation ...

  7. 设计模式之模板方法模式(Java实现)

    "那个,上次由于我老婆要给我做饭,所以就没有说完就走掉了...这个那个".这次和以前一样,先来开场福利(工厂方法模式已被作者踹下场).由美女抽象工厂介绍一下适用场景~大家欢迎 抽象 ...

  8. FZU 2082(过路费)

    题目链接:传送门 题目大意:中文题,略 题目思路:树链剖分(注意要把边上的权值转移到深度较大的点上来维护) 最后当top[x]==top[y]注意id[x]+1因为是维护的点而题目是边 如果不+可能会 ...

  9. 微信小游戏5.2.2 没有xml支持库的问题解决

    需要下载xml支持库,并在game.js添加 window.DOMParser = require("./xmldom/xmldom.js").DOMParser; 如下图:

  10. 【BZOJ4428】[Nwerc2015]Debugging调试 记忆化搜索+分块

    [BZOJ4428][Nwerc2015]Debugging调试 Description 你看中的调试器将不会在这件事上帮助你.有代码可以通过多种方式在调试与正式发布的间隙发生不同的行为,当出现这种情 ...