当前位置:首页 > 在线留言 >

使用Python处理目录(二)-计算某个目录下特定文件类

编辑:北京飞炫空间展览展示有限公司 时间:2017-09-07 13:35:46阅读次数:2
使用Python处理目录(二):计算某个目录下特定文件类型中文件总行数

计算某个目录下特定文件的行数,从文件中读入配置参数,计算结果输出到文件指定文件:
该功能是基于第一篇系列文章《打印目录下的文件名》的基础上加以修改得到的,主要的逻辑是遍历目录下的文件,然后读取文件中的内容,计算行数。

为了方便修改配置,本文中的代码所需要的配置都是从文件中读取的。FilePath标识文件路径,patterns, single_level同第一篇文章中的功能一样。exceptFile指的是需要排除的目录,目的是将指定目录下特定的子目录不作为搜索计算的目录。outDir表示统计结果打印的输出文件。

代码中频繁调用的.rstrip('\n')目的是将文件中的 某一行的换行符去掉。
GetCommonElements目的是取两个集合的交集
computerLineNum计算某个文件有多少行,该函数利用了文件对象的enumerate轻松的将文本行数统计了出来。

import fnmatch, os FilePath = '' patterns = '' single_level = False exceptFile = 'build;Depend' outDir = '' def ReadAllConfig(filename = 'Config.txt'): fileObj = open(filename, 'rU') global FilePath global patterns global single_level global exceptFile global outDir FilePath, patterns, single_level1, exceptFile, outDir= fileObj.readlines()[:] FilePath = FilePath.rstrip('\n') patterns = patterns.rstrip('\n') exceptFile = exceptFile.rstrip('\n') single_level1 = single_level1.rstrip('\n') outDir = outDir.rstrip('\n') if single_level1 == 'False': single_level = False else: single_level = True def GetCommonElements(firstSet, secondSet): return set(firstSet).intersection(set(secondSet)) def allFiles(root, patterns = '*.cpp;*.h', single_level = False, yield_folders = False, exceptFile = ""): patterns = patterns.split(';') excpetFiles = exceptFile.split(';') for path, subdirs, files in os.walk(root): lastDirs = path.split('\\') newSet = GetCommonElements(lastDirs, excpetFiles) if len(newSet) != 0: continue if yield_folders: #add subdirs to the tail of files files.extend(subdirs) files.sort() for name in files: for pattern in patterns: if fnmatch.fnmatch(name, pattern): yield os.path.join(path, name) break #only deal one level of the dir if single_level: break def computerLineNum(strFileName): fileObj = open(strFileName, 'rU') count = 0 for count, LineContent in enumerate(fileObj): pass return count + 1 def ComputerFilesTotalLineNumsInDir(dirName, outDir1): TotalCount = 0 dirName = os.path.normpath(dirName) fileObj1 = open(outDir1, 'w') for name in allFiles(dirName, patterns = patterns, exceptFile = exceptFile): count = computerLineNum(name) str1 = 'the line of the file %s is : %d'%(name, count) print(str1) fileObj1.write(str1) TotalCount += count str1 = 'the total line count of the dir %s is %d:'%(dirName, TotalCount) print(str1) fileObj1.write(str1) fileObj1.close() if __name__ == "__main__": ReadAllConfig() ComputerFilesTotalLineNumsInDir(FilePath, outDir)

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:仙桃网站建设 http://xiantao.45qun.com

上一篇:python基础教程_学习笔记11:魔法方法、属性和迭代器 下一篇:最后一页

相关阅读