import os

 def get_all_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_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_suffix_out(suf="txt"):
'''装饰器。功能:获取后缀为指定后缀(suf)的文件名列表
:param suf:指定后缀,如:txt、jpg
:return:suf_list符合指定后缀的文件列表
''' def get_suffix(fun):
def inner(*args, **kwargs):
# print("inner 后缀限制是:", suf)
# # print("获取后缀为.pdf的文件名列表")
file_name_list = fun(*args, **kwargs)
suf_list = []
for file in file_name_list:
src_suf = os.path.splitext(file)[1] # 获取文件的后缀,如:.pdf、.txt
if src_suf.lower() == '.' + str(suf).lower(): # 判断后缀是否为.suf、.SUF
suf_list.append(file)
return suf_list return inner return get_suffix def get_papers_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.isabs(file): # 1、如果为绝对路径,r表示绝对路径全路径列表
if not os.path.exists(file): # 检查全路径的有效性
print("路径不存在")
exit()
if os.path.isfile(file): # 判断是否为文件(非文件夹)
file_name_only_list.append(file)
else: # 2、如果为相对路径,r表示相对路径统一路径字符串
path_file = r + os.sep + file
if not os.path.exists(path_file): # 检查全路径的有效性
print("路径不存在")
exit()
if os.path.isfile(path_file): # 判断是否为文件(非文件夹)
file_name_only_list.append(file)
return file_name_only_list return inner # 巧用装饰器做过滤条件
@get_all_path # 获取全路径文件列表。如:[D:\tmp\123.pdf]
@get_pdf # 获取pdf后缀列表。如:[123.pdf]
@get_papers_only # 只获取文件列表,不含文件夹。如:[a、b、1.txt、123.pdf]
def get_list(refer_path):
'''获取指定路径下的所有文件列表(含文件夹)。如:a、b、1.txt、123.pdf
:param refer_path: 指定存放文件的路径
:return:路径下的所有文件名
'''
try:
file_name_list = os.listdir(refer_path)
return file_name_list
except Exception as e:
print(e)
exit() @get_papers_only # 只获取文件列表,不含文件夹。如:[a、b、1.txt、123.pdf]
@get_suffix_out("txt") # 只获取txt后缀列表。如:[D:\tmp\123.txt]
# @get_pdf # 只获取pdf后缀列表。如:[D:\tmp\123.pdf]
def all_path(all_path_list):
return all_path_list if __name__ == '__main__':
# 指定路径
refer_path = r'D:\tmp'
# 文件名称列表
file_name_list = get_list(refer_path)
print(file_name_list) path_list = ['D:\\tmp\\123.PDF',
'D:\\tmp\\combinedminutes.txt',
'D:\\tmp\\mark.pdf',
'D:\\tmp\\meetingminutes.ps',
'D:\\tmp\\meetingminutes2.123',
'D:\\tmp\\rotatedpage.pdf',
'D:\\tmp\\watermarkedCover.pdf'] print(path_list)
pdf_list = all_path(path_list)
print(pdf_list)

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

装饰器学习案例:

例子1:简单装饰器

 def check(fun):
def inner():
print("权限检查--1")
fun() return inner @check
def foo1():
print("查看用户信息") if __name__ == '__main__':
foo1()

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

 def check(fun):
def inner(*args, **kwargs):
print("权限检查--1")
fun(*args, **kwargs) return inner @check
def foo1():
print("查看用户信息") if __name__ == '__main__':
foo1()

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

 def check_out(who):
def check(fun):
def inner(*args, **kwargs):
print("权限检查--1,部门时:%s" % who)
fun(*args, **kwargs) return inner return check @check_out("天猫")
def foo1(a, b):
print("查看用户信息%s" % (a + b)) @check_out("闲鱼")
def foo2(a, b, c):
print("查看用户信息%s" % (a + b + c)) if __name__ == '__main__':
foo1(1, 2)
foo2(1, 2,3)

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

 class MyClass(object):
def __init__(self, fun):
print('__init__函数:fun=', fun)
self.fun = fun def __call__(self, *args, **kwargs):
print("验证权限")
return self.fun(*args, **kwargs) @MyClass
def foo1(a, b):
print("%s + %s = %s" % (a, b, (a + b))) if __name__ == '__main__':
foo1(1,2)

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

 import functools

 def check(fun):
"""检查权限的装饰器"""
@functools.wraps(fun)
def inner(*args, **kwargs):
"""这里是闭包函数"""
print("权限检查--1")
fun(*args, **kwargs) return inner @check
def foo1():
'''这里是原始函数foo1的说明文档'''
print("查看用户信息") if __name__ == '__main__':
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. JavaSE(十)之反射

    开始接触的时候可能大家都会很模糊到底什么是反射,大家都以为这个东西不重要,其实很重要的,几乎所有的框架都要用到反射,增加灵活度.到了后面几乎动不动就要用到反射. 首先我们先来认识一下对象 学生---- ...

  2. Spring+Swagger文档无法排序问题解决

    项目中用到swagger用于自动生成文档,遇到了好多结合后的问题.而对于这个排序问题,在查看了后端Swagger原代码之后,发现视乎当前使用的swagger(不是springfox,应该不是官方的,网 ...

  3. 如何让View一直沿z轴旋转

    #import <QuartzCore/QuartzCore.h>... CABasicAnimation *rotationAni = [CABasicAnimation animati ...

  4. 完美解决jQuery符号$与其他javascript 库、框架冲突的问题

    目前有大量的 javascript 开发框架,其中有一部分使用 $ 作为调用符号,这可能导致相互之间的冲突,而 jQuery 为解决这个问题,可以在 jQuery 导入时放弃 $ 使用权,届时 $ 则 ...

  5. Unity5.4新版AssetBundle资源打包

    (1)新版本 唯一打包API Buildpipeline.BuildAssetBundle (2)在资源的Inpector界面最下方可设置该资源的assetbundleName, 每个assetbun ...

  6. Git高级操作

    本文是在Git操作指南基础上衍生出来的高级操作,如果你对git不是很熟悉,建议你先阅读Git操作指南. 一.忽略提交特定文件 如果你不想让一些文件上传到git仓库中,可以让Git忽略特定文件或是目录, ...

  7. wm_concat函数 用法

    首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用 准备测试数据 SQL>  ...

  8. Android Bigmap的操作(绘制,裁剪)

    绘制 依据某一种颜色绘制Bitmap Bitmap resultBitmap = Bitmap.createBitmap(600,800,Bitmap.Config.ARGB_8888); resul ...

  9. K - problem 问题

    Leetcode 有几个题目, 分别是 2sum, 3sum(closest), 4sum 的求和问题和 single Number I II, 这些题目难点在于用最低的时间复杂度找到结果 2-sum ...

  10. UML设计,可以设计程序的用例图、类图、活动图等_SurfaceView

    « 对Cocos2d游戏引擎有一定的了解和实践,并接触过处理3D图形和模型库的OpenGL 在进行游戏界面的绘制工作中,需要处理大量的工作,这些工作有很多共性的操作:并且对于游戏界面的切换,元素动作的 ...