#!\urs\bin\env python#encoding:utf-8 #設定編碼方式 import osimport reclass loop_file: def __init__(self, root_dir, short_exclude=[], long_exclude=[], file_extend=[]): self.root_dir = root_dir self.short_exclude = short_exclude self.long_exclude = long_exclude self.file_extend = file_extend def __del__(self): pass def start(self, func): self.func = func return self.loop_file(self.root_dir) def loop_file(self, root_dir): t_sum = [] sub_gen = os.listdir(root_dir) for sub in sub_gen: is_exclude = False for extends in self.short_exclude: ##在不檢查檔案、目錄範圍中 if extends in sub: ##包含特定內容 is_exclude = True break if re.search(extends, sub): ##匹配指定正則 is_exclude = True break if is_exclude: continue abs_path = os.path.join(root_dir, sub) is_exclude = False for exclude in self.long_exclude: if exclude == abs_path[-len(exclude):]: is_exclude = True break if is_exclude: continue if os.path.isdir(abs_path): t_sum.extend(self.loop_file(abs_path)) elif os.path.isfile(abs_path): if not "." + abs_path.rsplit(".", 1)[1] in self.file_extend: ##不在尾碼名 檢查範圍中 continue t_sum.append(self.func(abs_path)) return t_sum if '__main__'==__name__: root_dir = r'D:\harness\newshoppingcart\testcase\promo\single_promo' short_exclude = ['.svn', '.*_new.rb'] ###不包含檢查的短目錄、檔案 long_exclude = [] ###不包含檢查的長目錄、檔案 file_extend = ['.rb'] ###包含檢查的檔案類型 lf = loop_file(root_dir, short_exclude, long_exclude, file_extend) for f in lf.start(lambda f: f): print f
給定一個主目錄,迴圈其下特定過濾規則的檔案,並傳給自訂的處理函數,最後返回每一個自訂函數返回的結果內容的列表。