使用Python处理目录(二):计算某个目录下特定文件类型中文件总行数

来源:互联网 发布:soylent 知乎 编辑:程序博客网 时间:2024/05/29 14:28

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

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

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

import fnmatch, osFilePath = ''patterns = ''single_level = FalseexceptFile = '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 = Truedef 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:            breakdef computerLineNum(strFileName):    fileObj = open(strFileName, 'rU')    count = 0    for count, LineContent in enumerate(fileObj):        pass    return count + 1def 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)
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 入职体检两对半怎么办? 入职体检肝功能异常怎么办 有乙肝怀孕建卡怎么办 重修的课有冲突怎么办 苹果7硬件坏了怎么办 发票记账联丢了怎么办 作废的发票没了怎么办 键盘esc键坏了怎么办 cad中esc键失灵怎么办 出家人老了病了怎么办 宜家吸盘吸不住怎么办 车内吸盘吸不住怎么办 水里吸盘吸不住怎么办 摩托车脱审4年怎么办 摩托车8年没年检怎么办 摩托车4年没年检怎么办 38度5算高烧吗怎么办 刚发现怀孕不想要怎么办 被蜥蜴咬出血了怎么办 去韩国打工签证怎么办多么钱 厕所堵了怎么办有妙招 蹲式厕所老是堵怎么办 下蹲式厕所堵了怎么办 蹲的厕所堵住了怎么办 厕所通了又堵怎么办 蹲式厕所经常堵怎么办 厕所下水管堵了怎么办 厕所堵了水满了怎么办 拉屎把厕所堵了怎么办 厕所堵了不下水怎么办 坐厕所堵了怎么办妙招 火车上丢了东西怎么办 网购的东西丢了怎么办 在酒店丢了东西怎么办 我好懒不想工作怎么办 被宠物刺猬咬了怎么办 被老鼠咬了怎么办打针 手指被老鼠咬了怎么办 孕妇被老鼠咬了怎么办 耳朵里面一直嗡嗡响怎么办 把语言栏删了怎么办