#/usr/bin/env python
#-*- encoding:utf-8 -*-
#Filename:file_filter.py
#作用:接收用戶指定的目錄和正則表達式,返回目錄中符合規定條件的文件的列表
import os
import fnmatch
class file_filter:
"""文件過濾器:接收用戶指定的目錄和正則表達式,返回目錄中符合規定條件的文件的列表"""
#類初始化的方法,類似於java中的構造器
def __init__(self):
pass
#self參數是爲了本類的實例可以調用這個方法
def filter(self,dir,regex):
#保存該目錄下符合條件的文件列表
_files = [];
try:
for f in os.listdir(dir):
if fnmatch.fnmatch(f,regex):
_files.append(f)
except Exception, e:
print 'Error while list [%s] ,msg: %s' % (dir,e)
finally:
pass
return _files
#可以傳入一個保存文件名稱正則的列表,本方法會遍歷指定的目錄,並返回這些符合條件的文件
def filter_multi_regex(self,dir,regexes):
_files = []
try:
_all_files = os.listdir(dir)
if len(_all_files) > 0:
print 'there are %d files totaly' % len(_all_files)
#爲了實現這個功能使用了雙層循環,這個不經濟啊
for reg in regexes:
for tmp in fnmatch.filter(_all_files,reg):
_files.append(tmp)
except Exception, e:
print 'Error while list [%s] ,msg: %s' % (dir,e)
finally:
pass
return _files
ff = file_filter()
if __name__ == '__main__':
#打印模塊的說明文檔
#print ff.__doc__
testdir = '/home/licb/documents/shells'
testreg = '*.sh'
testreglist = ['*.txt','*.sh']
#_files = ff.filter(testdir,testreg)
_files = ff.filter_multi_regex(testdir,testreglist)
if len(_files) > 0:
for f in _files:
print os.path.abspath(f)
else:
print '''"%s" is a empty dir or there is no file like "%s"''' % (testdir,testreg)
初學python,一個文件過濾器,請拍磚。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.