Python-装饰器-案例-获取文件列表
生活随笔
收集整理的這篇文章主要介紹了
Python-装饰器-案例-获取文件列表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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-装饰器-案例-获取文件列表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 11月20日内容
- 下一篇: js Array.prototype.s