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

View Code

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

装饰器学习案例:

例子1:简单装饰器

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

View Code

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

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

View Code

例子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
12 @check_out("天猫")
13 def foo1(a, b):
14     print("查看用户信息%s" % (a + b))
15
16
17 @check_out("闲鱼")
18 def foo2(a, b, c):
19     print("查看用户信息%s" % (a + b + c))
20
21
22 if __name__ == '__main__':
23     foo1(1, 2)
24     foo2(1, 2,3)

View Code

例子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
11 @MyClass
12 def foo1(a, b):
13     print("%s + %s = %s" % (a, b, (a + b)))
14
15
16 if __name__ == '__main__':
17     foo1(1,2)

View Code

例子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__)

View Code

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

转载于:https://www.cnblogs.com/andy9468/p/9996464.html

Python-装饰器-案例-获取文件列表相关推荐

  1. Python 用 os.listdir() 获取文件列表和筛选特定格式文件

    Python 用 os.listdir() 获取文件列表和过滤筛选多种格式的文件 测试代码: folder = r"D:\aatest" files = os.listdir(fo ...

  2. python装饰器实例-python装饰器案例

    普通装饰器函数 计算函数的运行时间 import requests import time import re # 黑名单 filter_urls = ['www.hao123.com', 'www. ...

  3. java获取文件列表,[javaSE] java获取文件列表

    递归测试 import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis ...

  4. 编程学习笔记之python深入之装饰器案例及说明文档[图]

    编程学习笔记之python深入之装饰器案例及说明文档[图] 装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰,所以称为装饰 ...

  5. Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用

    文章目录 系列目录 原项目地址: 第16课:函数的高级应用 装饰器(记录执行时间的例子) 递归调用 简单的总结 第17课:面向对象编程入门 类和对象 定义类 创建和使用对象 初始化方法 打印对象 面向 ...

  6. Python 装饰器 函数

    Python装饰器学习(九步入门):http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 浅谈Python装饰器:https://b ...

  7. Python 装饰器详解(下)

    Python 装饰器详解(下) 转自:https://blog.csdn.net/qq_27825451/article/details/84627016,博主仅对其中 demo 实现中不适合pyth ...

  8. 一篇文章汇总Python装饰器全知识图谱(使用场景,基本用法,参数传递,闭包操作,类装饰器和AOP)

    装饰器,是将Python代码变得低耦合,简洁优美的必经之路,同时也是实现闭包操作,AOP编程的基础.这一篇博客从装饰器的产生原因,基本使用,延伸到参数传递,闭包操作,最后到类装饰器和AOP,希望能用我 ...

  9. python装饰器-python装饰器是哪个版本支持的

    python装饰器是哪个版本支持的 **kwargs): print ' % (unction.__name__:@app.route(':import unctoolsde log(text=&am ...

最新文章

  1. 迁移到云端的企业数据需注意安全
  2. 三个基于.net的浏览器内核使用的比较
  3. 统计学习方法第二章作业:感知机模型原始形式与对偶形式代码实现
  4. github仓库上的漏洞修复
  5. 相机标定(二)深入理解四大坐标系与其变换关系
  6. 平板电脑应用_什么是机房巡检AI机器人?工业平板电脑的应用如何体现
  7. 电商素材网站解救节日美工忙,赶紧收藏
  8. python未定义名称大小_名称错误:未定义名称“高度”
  9. ActionContext介绍(在Struts2中)
  10. 高等数学18讲(19版)反常积分的计算与敛散性判别
  11. 电子元器件选型——三极管
  12. 草图大师:SketchUp 2019 for Mac
  13. Java线程状态RUNNABLE详解
  14. 这次是100秒 蓝箭航天80吨液氧甲烷发动机100%推力试车
  15. 什么是“天道左旋、地道右旋”?
  16. 渗透测试工程师面试题大全(三)
  17. 【网络通信】Teardrop编程创造虚假IP包
  18. linux简单服务器的配置
  19. Hive SQL 小表与大表Join 原理与实操
  20. VHDL语言基础-数据类型及运算符

热门文章

  1. k8s 资源文件基础练习
  2. Word2016此功能看似已中断...
  3. Kafka入门教程(转载)
  4. 本地连接出来的很慢解决方法
  5. 这 17 个 JVM 参数,高级 Java 必须掌握!
  6. 关于重构,看此文就够了
  7. 人民广场怎么走?地铁换乘算法的实现
  8. 我作为开发者犯过的两次愚蠢的错误
  9. 深度探秘 Java 8 函数式编程(下)
  10. 华为:N个同学站成一排,发饼干至少每人一个,相邻分值高的可以多分一个以上饼干,求问至少需要发多少个饼干满足要求