目录
- 思路
- 开发环境
- 安装xlrd
- 读取作业文件
- 读取Excel文件里的名单
- 遍历名单列表,用字典匹配检查列表中的值并存入文件中
- 完整的代码
将重复性的工作丢给电脑程序,毕竟自己脑子也快不过电脑。
思路
在收作业时我们会习惯将文件名以学号后两位加上自己的名字方便学委统计人数,那么我们只需要把收齐的作业统一放到一个文件夹里,通过电脑文件自动排好序后,我们只需要用Python读取文件名,再读取我们事先准备好的全班级excel名单文件,将文件名与excel文件中的名字作匹配即可。
开发环境
- Python
- 第三方库xlrd
安装xlrd
按下键盘win+r打开运行窗口输入cmd打开命令提示符
输入pip install xlrd==1.2.0
注意: 由于 1.2.0后面得版本取消了对xlsx文件得读取,这里最好安装之前的版本,默认pip安装的是最新版的xlrd库
读取作业文件
- 导入os库
import os
- 设置读取作业文件名函数
def listdir(path, list_name): #传入存储的list
for file in os.listdir(path):
file_path = os.path.join(path, file)
if os.path.isdir(file_path):
listdir(file_path, list_name)
else:
list_name.append(file_path)
- 创建了一个检查列表用于存放交了的人的名单并调用函数
check = []
path = 'x:xxx/xxx/需要检查的作业文件路径'
listdir(path,check)
读取Excel文件里的名单
- 导入xlrd库
- 读取Excel文件里的名单并用字典存入,再用列表装入
init_path = 'x:xxx/xxx/名单文件路径.xlsx'
xlsx = xlrd.open_workbook(init_path)
table = xlsx.sheet_by_index(0)
all_data = []
for n in range(1,table.nrows):
id = table.cell(n,6).value
name = table.cell(n,7).value
sex = table.cell(n,8).value
sno_id = table.cell(n,9).value
data = {"id":id,"name":name,"sex":sex,"sno_id":sno_id}
all_data.append(data)
遍历名单列表,用字典匹配检查列表中的值并存入文件中
匹配的原则采用字符串的切片,os.path.basename(check[j])[0:2]可以显示出文件路径下的文件名并用切片分割出数字
print(os.path.basename(path)+"没交名单:")
with open('x:xxx/xxx/需要保存的路径/未交名单.txt',"w",encoding="utf-8")as f:
f.write("未交名单:\n")
for i in all_data:
for j in range(len(check)):
if i['id'] == os.path.basename(check[j])[0:2]:
# print(i['name'] + "同学有交哦(0_0)")
break
else:
with open('x:xxx/xxx/需要保存的路径/未交名单.txt', "a", encoding="utf-8")as f:
f.write(i['sno_id']+i['name']+"\n")
print(i['name']+"没交($_$),学号:"+i['id'])
完整的代码
import xlrd
import os
def flie_check():
# 读取文件路径函数
def listdir(path, list_name): #传入存储的list
for file in os.listdir(path):
file_path = os.path.join(path, file)
if os.path.isdir(file_path):
listdir(file_path, list_name)
else:
list_name.append(file_path)
# 创建了一个检查列表用于存放交了的人的名单
check = []
path = 'x:xxx/xxx/需要检查的作业文件路径'
listdir(path,check)
# 读取Excel文件里的名单并用字典存入,再用列表装入
init_path = 'x:xxx/xxx/名单文件路径.xlsx'
xlsx = xlrd.open_workbook(init_path)
table = xlsx.sheet_by_index(0)
# print(table.cell(1,6).value)
all_data = []
for n in range(1,table.nrows):
id = table.cell(n,6).value
name = table.cell(n,7).value
sex = table.cell(n,8).value
sno_id = table.cell(n,9).value
data = {"id":id,"name":name,"sex":sex,"sno_id":sno_id}
all_data.append(data)
# print(all_data[0])
# 遍历名单列表,用字典匹配检查列表中的值
print(os.path.basename(path)+"没交名单:")
with open('x:xxx/xxx/需要保存的路径/未交名单.txt',"w",encoding="utf-8")as f:
f.write("未交名单:\n")
for i in all_data:
for j in range(len(check)):
if i['id'] == os.path.basename(check[j])[0:2]: # os.path.basename(check[j])[0:2]可以显示出文件路径下的文件名并用切片分割出数字
# print(i['name'] + "同学有交哦(0_0)")
break
else:
with open('x:xxx/xxx/需要保存的路径/未交名单.txt', "a", encoding="utf-8")as f:
f.write(i['sno_id']+i['name']+"\n")
print(i['name']+"没交($_$),学号:"+i['id'])
if __name__ == '__main__':
flie_check()