编写python程序统计脚本数并且统计同一类文件的代码行数

前些天一同学和我说大过年还有作业,老难了一点都不想写,要不发给我看看,顺便能教教作业是咋写的。我想着又不是同一专业的,学的语言也不同,我当场就说,这你们专业的作业,我一外行咋会啊,尽量看看吧。
话不多说,上题目
在这里插入图片描述
第一眼看到就是想着,就是读文件操作嘛,然后对文件名进行筛选,同一文件前缀的进行脚本数递增,然后再进行读行操作。嗯大致就这样。后续在编写的时候再进行调整。于是,二话不说,开始现学,开始找资料。终于在几个小时后完成了第一部分。

利用os进行读文件操作,在循环中对进行名进行筛选,并添加进行列表中,然后对此列表进行去重操作

import os
import re
path = os.getcwd()    #获取当前路径
path=r'D:\一级软件\任务7-data' #文件路径位置
count=0 #记录总的 .py 文件数目

list_name=[] #存放文件名的小学号部分
lis_file=[]
c=0
for root,dirs,files in os.walk(path):    #遍历统计
      for each in files:
          #对文件名进行筛选 获取已 .py 结尾的文件
           if os.path.splitext(each)[1] == '.py':
              #print(each)#打印筛选出的文件名
              count+=1
              list_name.append(re.search('(\d+)', each).group())# 对获取的文件名进行正则判断获取学号部分

#print(count)#打印所有以 .py结尾的文件

list_name.sort()  #将列表排序,sort是排序的意思


print(list_name)  #打印获取到的小学号 存在重复
i = 0
print("id ","小学号 "," 个数 ")
for s in list_name:  #对于list_name中的每一个元素s

    print(i, s,list_name.count(s))
    # 循环判断列表中的数据个数是否大于1,大于则将重复的移除
    while list_name.count(s) > 1:  #li.count(s)是统计里中s的个数
        list_name.remove(s) #删除li列表中的元素s
    i = i + 1
print(list_name)#打印所有的学号 无重复




第二部分的读取代码行数的程序也在第二天抽时间进行,一开始无法理解好for循环的嵌套进行读取,就只能另起一个类进行测试,避免破坏了原来的代码结构

import os
import re
path = os.getcwd()    #获取当前路径
path=r'D:\一级软件\任务7-data' #文件路径位置
count=0 #记录总的 .py 文件数目
linenum =0 # 记录行数

for root, dirs, files in os.walk(path):  # 遍历统计
    for each in files:
        # 对文件名进行筛选 获取已 .py 结尾的文件
        if os.path.splitext(each)[1] == '.py':
             # 对文件名进行筛选 获取已 .py 结尾的文件
                if(re.search('(\d+)', each).group() == '8'):
                    position = root + '\\' + each  # 构造绝对路径,"\\",其中一个'\'为转义符
                    print(each)
                    #print(each.count())#打印筛选出的文件名
                    linenum += len(open(position, 'r', encoding='UTF-8',errors="ignore").readlines())
print(linenum)

最后最后最后,在自己的不懈努力下,完整的代码终于是好了。因为也是半路上车,代码可能就没有规范美观可言了,但能运行,能拿到相关数据我觉得我做的还挺不错了,哈哈。

import os
import re
path = os.getcwd()    #获取当前路径
path=r'D:\一级软件\任务7-data' #文件路径位置  修改为自己的文件路径
count=0 #记录总的 .py 文件数目
list_name=[] #存放文件名的小学号部分
list_nameno=[]#存放每位同学调教的脚本数
lis_file=[] #用来存放每位同学的总代码行数
i = 0#进行最后循环遍历的参数


for root, dirs, files in os.walk(path):  # 遍历统计
    for each in files:
        # 对文件名进行筛选 获取已 .py 结尾的文件
        if os.path.splitext(each)[1] == '.py':
            # print(each)#打印筛选出的文件名
            count += 1
            list_name.append(re.search('(\d+)', each).group())  # 对获取的文件名进行正则判断获取学号部分
print(count)#打印总 .py 文件数
list_name.sort()  # 将列表排序,sort是排序的意思
#print(list_name)  #打印获取到的小学号 存在重复


#将小学号集合进行移除重复元素 并对脚本数进行统计
for s in list_name:  # 对于list_name中的每一个元素s  循环判断列表中的数据个数是否大于1,大于则将重复的移除
    list_nameno.append(list_name.count(s))#将每位同学提交的脚本数进行储存
    while list_name.count(s) > 1:  # li.count(s)是统计里中s的个数
        list_name.remove(s)  # 删除li列表中的元素s
#print(list_nameno)#打印脚本数


#循环读取每位同学的脚本行数 添加进列表中
for u in list_name:
  linenum = 0  # 记录行数 且在每读取完一个同学的脚本总行数后进行重置 进而读取下一位
  for root, dirs, files in os.walk(path):  # 遍历统计
    for each in files:
        # 对文件名进行筛选 获取已 .py 结尾的文件
        if os.path.splitext(each)[1] == '.py':
             # 通过小学号向上查找对应的文件名 并构造路径 进行文件读行操作 再进行每个文件行数的累加操作后追加至列表中
                if(re.search('(\d+)', each).group() == str(u)):
                    position = root + '\\' + each  # 构造绝对路径,"\\",其中一个'\'为转义符
                    print(each)#打印筛选出的文件名
                    linenum += len(open(position, 'r', encoding='UTF-8', errors='ignore').readlines())
  print(linenum)#每查询完一位同学的便在其最后进行打印其总行数
  lis_file.append(linenum)#将每位同学的总行数追加至列表中
#print(list_name)  # 打印所有的学号 无重复
#print(lis_file)#打印每位同学的脚本总行数


#打印结果
print("id ", "小学号 ", " 个数 ","代码行数")
for li in list_name:
    print(i, li, list_nameno[i],lis_file[i])
    i+=1





部分运行结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值