初學python,一個文件過濾器,請拍磚。

#/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)

		
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章