一种利用文件地址进行关键字统计的实现

导读:假设文件是学生提交上来的作业,而关键字是学生的姓名,最终将得到学生提交作业的次数。

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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值