题目描述:
假如E盘中有上机测试目录,里面包含实验1 实验2 实验3 而实验123里面存放着学生上交的实验报告,格式为docx(doc)。
现在要求统计出这些学生上交的作业次数,结果以excel形式给出。
知识点:python文件操作,正则表达式。
涉及的python库: os os.path re xlsxwriter
代码:
import os
import os.path
import re
import xlsxwriter
filelist=[]
result=[]
dic=dict()
def file_name(dirname):
'''递归的把文件名添加到filelist列表中'''
for item in os.listdir(dirname):
abs_item=os.path.join(dirname,item) #abs_item为绝对路径
filelist.append(item) #item为文件名
if os.path.isdir(abs_item):#若是目录,递归调用
file_name(abs_item)
dictory_name=input("请输入目录名:")
file_name(r'%s'%dictory_name)
string =''
for i in filelist: #filelist是一个存储文件名的列表
string+=i
#print(string) string="实验120177720752王雨岫.docx20177830101安新宇.docx20177...."
pattren = re.compile(r'2017[0-9]{7}') #用正则表达式匹配学号
m=pattren.findall(string)
#print(m) m=['20177720752', '20177830101',....]
n=set(m)
for i in n:
dic.update({i:m.count(i)})
print(dic) #dic={'20177830103': 3, '20177830202': 3, '20177830117': 2,...}
'''把dic写入execl'''
workbook = xlsxwriter.Workbook("E:\\data.xlsx")
worksheet = workbook.add_worksheet()
f = workbook.add_format({'bold': True, 'bg_color': 'red'})
worksheet.write(0, 0, '学号', f)
worksheet.write(0, 1, '上交次数', f)
worksheet.set_column("A:A",15)
row=1
col=0
for key in dic.keys():
worksheet.write(row, col, key)
row += 1
row=0
for value in dic.values():
worksheet.write(row+1,col+1,value)
row += 1
workbook.close()
运行结果: