导读:假设文件是学生提交上来的作业,而关键字是学生的姓名,最终将得到学生提交作业的次数。
1 递归返回目录列表
#定义递归函数,返回列表
def getAllFile(somepath):
#print('begin-->',os.listdir(somepath))
fileList = []
for df in os.listdir(somepath):
os.chdir(somepath)
#print('当前目录:',os.getcwd())
#print(df)
if os.path.isfile(df):
fileList.append(os.path.join(somepath,df))
#print('is a file')
if os.path.isdir(df):
#print('is a dir')
fileList.extend(getAllFile(os.path.join(somepath,df)))
return fileList
2 确定学生名单(被统计的关键字)
#读入名单,返回名单列表
def nameList(nldir):
file = open(nldir)
namelist = []
for line in file:
namelist.append(line.rstrip())
return namelist
nl = ['A', 'B', 'C', 'D', '...']
nldir = r'E:\2022down\python编程-信息211\pr01\网络192-3名单.txt'
# nldir = 'E:/2022up\信息211-python/2022-3-18/namelist.txt'
nl = nameList(nldir)
3 初始化输出结果的excel文件
#创建输出结果的excel
wb = xlwt.Workbook()
# 添加一个表
ws = wb.add_sheet('作业统计结果')
4 初始化学生作业地址
URL_WORK = r'E:\2022down\PHP动态网页制作-网络192、193\学生作品\平时'
5 初始化记录结果的变量
resultAll = dict([(n,0) for n in nl])
6 获取作业分批存在地址的目录集
cur_dir = os.listdir(URL_WORK)
#统计交作业情况
ws.write(0, 0, '姓名')
ws.write(0, 1, '作业次数')
for i in range(len(nl)):
for s_file in cur_dir:
s_dir = os.path.join(URL_WORK,s_file)
#print(s_dir)
if os.path.isdir(s_dir):
#判断本次课是否交作业
fileList = getAllFile(s_dir)
for d in fileList:
if nl[i] in d:
#记录判断的结果
resultAll[nl[i]] +=1
break
#写入excel中
ws.write(0+i+1, 0, nl[i])
ws.write(0+i+1, 1, resultAll[nl[i]])
7 保存输出结果
# 5 保存输出结果
print(resultAll)
wb.save(os.path.join(URL_WORK,'192与193线下作业信息统计结果.xls'))
附完整代码
为了方便使用,完整代码里把作业地址、输出结果文件名、学生名单等可变选项都提到前面了。
import os
import xlwt
# 1 初始化学生作业地址与输出结果文件名
#URL_WORK = r'E:\2022down\PHP动态网页制作-网络192、193\学生作品\平时'
#RESULT = '192与193线下作业信息统计结果.xls'
URL_WORK = r'E:\2022down\大数据导论\学生作品\平时'
RESULT = '信息211大数据线下作业信息统计结果.xls'
# 2 确定学生名单
#读入名单,返回名单列表
# nldir = 'E:/2022up\信息211-python/2022-3-18/namelist.txt'
def nameList(nldir):
file = open(nldir)
namelist = []
for line in file:
namelist.append(line.rstrip())
return namelist
nl = ['A', 'B', 'C', 'D', '...']
#nldir = r'E:\2022down\python编程-信息211\pr01\网络192-3名单.txt'
#nl = nameList(nldir)
# 3 定义递归函数,返回列表
def getAllFile(somepath):
#print('begin-->',os.listdir(somepath))
fileList = []
for df in os.listdir(somepath):
os.chdir(somepath)
#print('当前目录:',os.getcwd())
#print(df)
if os.path.isfile(df):
fileList.append(os.path.join(somepath,df))
#print('is a file')
if os.path.isdir(df):
#print('is a dir')
fileList.extend(getAllFile(os.path.join(somepath,df)))
return fileList
# 4 初始化输出结果的excel文件
#创建输出结果的excel
wb = xlwt.Workbook()
# 添加一个表
ws = wb.add_sheet('作业统计结果')
# 5 初始化记录结果的变量
resultAll = dict([(n,0) for n in nl])
# 6 获取作业分批存在地址的目录集
cur_dir = os.listdir(URL_WORK)
#统计交作业情况
ws.write(0, 0, '姓名')
ws.write(0, 1, '作业次数')
for i in range(len(nl)):
for s_file in cur_dir:
s_dir = os.path.join(URL_WORK,s_file)
#print(s_dir)
if os.path.isdir(s_dir):
#判断本次课是否交作业
fileList = getAllFile(s_dir)
for d in fileList:
if nl[i] in d:
#记录判断的结果
resultAll[nl[i]] +=1
break
#写入excel中
ws.write(0+i+1, 0, nl[i])
ws.write(0+i+1, 1, resultAll[nl[i]])
# 7 保存输出结果
print(resultAll)
wb.save(os.path.join(URL_WORK,RESULT))