青年大学习人员审查系统(2.0版本)
本篇文章依旧是利用python进行青年大学习人员审查,与之前的最初版本不同的是本版本是使用主函数调用其他函数来运行,不必像之前一样打开一个程序后还要继续打开其他程序,本版本使程序更加模块化系统化,废话不多说,直接上代码。
另:对本篇文章中的模块函数不清楚的可以查看作者的另一篇文章利用python进行青年大学习人员审查
为方便各位,这里给出源项目下载地址链接:https://pan.baidu.com/s/1_31-HFvJXdm0-XCecRMSMA
提取码:bc6k
希望各位给个赞
主函数的作用是调用其他模块函数和输入源文件名(比如省内下发的青年大学习全省人员名单统计和院/系内人员名单统计)
#青年大学习人数审查系统主函数
from sxit_ky import sxit_ky
from sxit_ky_students import sxit_ky_students
from not_watching import not_watching
from people_not_watching import people_not_watching
import time
Provincial_Universities = input("请输入省内下发的青年大学习人员统计文件名:")
Department_Students = input("请输入院/系人员名单的文件名:")
sxit_ky(Provincial_Universities)
#程序进行延迟是为了避免程序所需文件尚未生成完毕后直接运行产生报错
time.sleep(10)
sxit_ky_students(Department_Students)
time.sleep(5)
not_watching()
time.sleep(5)
people_not_watching()
记得在运行主函数之前先将所输入的文件名其源文件放到data目录下的old_data文件夹下。(否则会报错)
生成观看人员名单的模块函数
#将矿业系青年大学习观看人员名单打印
import xlrd
from openpyxl import load_workbook
from pypinyin import pinyin
def sxit_ky(Provincial_Universities):
fi=open("data\\new_data\\sxit_ky_people.txt","w")
#创建一个txt文件储存学生全部数据
#fo=open("data\\new_data\\sxit_ky_people_full.txt","w")
#doc = xlrd.open_workbook('123.xlsx')
route='data\\old_data\\'+str(Provincial_Universities)+'.xlsx'
#wb = load_workbook('data\\old_data\\Provincial_Universities.xlsx')
wb = load_workbook(route)
#ws = doc.sheet_by_index(0)
sheets = wb.worksheets
print(sheets)
sheet = sheets[0]
print(sheet)
rows = sheet.rows
print(rows)
for row in rows:
#print(row)
row_val = [col.value for col in row]
#print(row_val)
#print(type(row_val[1]))
if('学校名,院/系名' in str(row_val[2])): #这里的‘学校名,院/系名’写你想筛查的目标名(一般直接复制excel文件中的名字即可),row_val[2]是你的'学校名,院/系名'在表格中所对应的索引值,不要瞎写,可能会导致逻辑错误。
#print(row_val)
#只生成学生姓名
try:
fi.write(str(row_val[0])+'\n')
except UnicodeEncodeError as e:
fi.write(str(pinyin(row_val))+'\n')
#生成学生全部数据
"""
try:
fo.write('姓名:'+row_val[0]+',')
fo.write('电话:'+row_val[1]+',')
fo.write('学校:'+row_val[2]+',')
fo.write('学号:'+row_val[3])
fo.write('\n')
except UnicodeEncodeError as e:
fo.write('姓名:'+str(pinyin(row_val[0]))+',')
fo.write('电话:'+row_val[1]+',')
fo.write('学校:'+row_val[2]+',')
fo.write('学号:'+row_val[3])
fo.write('\n')
"""
"""for i in row_val:
if str(i[2])=='学校名,院/系名':
fi.write(row_val[0])"""
print(' ')
#关闭文件
fi.close()
#fo.close()
"""print(ws.nrows)
cell_11=sheet.cell(2,2).value
print(cell_11)
print(type(cell_11))
"""
程序里的‘学校名,院/系名’写你想筛查的目标名(一般直接复制excel文件中的名字即可),row_val[2]是你的’学校名,院/系名’在表格中所对应的索引值,不要瞎写,可能会导致逻辑错误。比如在上图中’学校名,院/系名’对应的索引值是2所以程序这里写2,下面的程序一样。
生成院/系人员名单的模块函数
#生成矿业系人员名单
import xlrd
from openpyxl import load_workbook
from pypinyin import pinyin
def sxit_ky_students(ky_students):
fi=open("data\\new_data\\sxit_ky_students.txt","w")
#doc = xlrd.open_workbook('123.xlsx')
route = 'data\\old_data\\'+str(ky_students)+'.xlsx'
#wb = load_workbook('data\\old_data\\院/系人员名单.xlsx')
wb = load_workbook(route)
#ws = doc.sheet_by_index(0)
sheets = wb.worksheets
print(sheets)
sheet = sheets[0]
print(sheet)
rows = sheet.rows
print(rows)
for row in rows:
#print(row)
row_val = [col.value for col in row]
#print(row_val)
#print(type(row_val[1]))
#if('大学' in str(row_val[2])):
#print(row_val)
try:
fi.write(str(row_val[3])+'\n')
except UnicodeEncodeError as e:
fi.write(str(pinyin(row_val[3]))+'\n')
"""for i in row_va1:
#if i[1]==''学校名,院/系名'':
print(i[1])"""
print(' ')
fi.close()
"""print(ws.nrows)
cell_11=sheet.cell(2,2).value
print(cell_11)
print(type(cell_11))
"""
这里的row_val[3]和上面是一个道理。
对未观看人员进行初步统计的模块函数(可能会有错误,以第二次统计结果为准)
#生成矿业系未观看人员名单
def not_watching():
#route_sxit_ky_people = 'data\\new_data\\'+str(sxit_ky_people)+'.txt'
#route_sxit_ky = 'data\\new_data\\'+str(sxit_ky)+'.txt'
#routenot_watching = 'data\\new_data\\'+str(not_watching)+'.txt'
fi = open('data\\new_data\\sxit_ky_people.txt',"r")
fo = open('data\\new_data\\sxit_ky_students.txt',"r")
fn = open("data\\new_data\\not_watching.txt","w")
data = fi.readlines()
data_ky = fo.readlines()
print(len(data))
for i in range(len(data_ky)):
a=data_ky[i]
a = ''.join(a.split())
a = a+'\n'
#print(type(a))
if(a not in data):
fn.write(a)
#print("1")
fi.close()
fo.close()
fn.close()
对未观看人员进行二次统计的模块函数
#将青年大学习未观看人员名单打印
import xlrd
from openpyxl import load_workbook
from pypinyin import pinyin
def people_not_watching():
#route_not_watching = 'data\\new_data\\'+str(not_watching)+'.txt'
#route_sxit_ky = 'data\\new_data\\'+str(sxit_ky)+'.txt'
fi=open('data\\new_data\\not_watching.txt',"r")
fo=open("data\\new_data\\people_not_watching.txt","w")
fn=open('data\\new_data\\sxit_ky_people.txt',"r")
#doc = xlrd.open_workbook('123.xlsx')
wb = load_workbook('data\\old_data\\院/系人员名单.xlsx')
#ws = doc.sheet_by_index(0)
sheets = wb.worksheets
print(sheets)
people=fi.readlines()
print(people)
num_people=fn.readlines()
sheet = sheets[0]
print(sheet)
rows = sheet.rows
print(rows)
i=0
for row in rows:
#print(row)
row_val = [col.value for col in row]
#print(row_val)
#print(type(row_val[1]))
#for i in range(0,1062):
if(str(row_val[3])+'\n' in people):
print(row_val)
#try:
fo.write(str(row_val)+'\n')
continue
#except UnicodeEncodeError as e:
else:
i+=1
continue
"""try:
fi.write('姓名:'+row_val[0]+',')
fi.write('电话:'+row_val[1]+',')
fi.write('学校:'+row_val[2]+',')
fi.write('学号:'+row_val[3])
fi.write('\n')
except UnicodeEncodeError as e:
fi.write('姓名:'+str(pinyin(row_val[0]))+',')
fi.write('电话:'+row_val[1]+',')
fi.write('学校:'+row_val[2]+',')
fi.write('学号:'+row_val[3])
fi.write('\n')"""
"""for i in row_val:
if str(i[2])=='学校名,院/系名':
fi.write(row_val[0])"""
print(' ')
fi.close()
fo.close()
fn.close()
"""print(ws.nrows)
cell_11=sheet.cell(2,2).value
print(cell_11)
print(type(cell_11))
"""
生僻字处理模块函数
from pypinyin import pinyin
try:
fo.write('姓名:'+row_val[0]+',')
fo.write('电话:'+row_val[1]+',')
fo.write('学校:'+row_val[2]+',')
fo.write('学号:'+row_val[3])
fo.write('\n')
except UnicodeEncodeError as e:
fo.write('姓名:'+str(pinyin(row_val[0]))+',')
fo.write('电话:'+row_val[1]+',')
fo.write('学校:'+row_val[2]+',')
fo.write('学号:'+row_val[3])
fo.write('\n')
"""
上面对程序源码进行了用法说明,下面主要说以下具体用法和对整个项目的分析
如上图所示,源文件都存储在根目录下,目的是方便查找文件。在主函数中所输入的文件名其源文件及其他模块函数生成的文件都储存在data目录下。本项目自带生僻字处理程序。如果遇到python无法编译的生僻字,将生僻字处理.py里的程序加入函数中即可(因作者没有遇到,这里就不赘述了,其实是懒)。
data目录下存在两个子目录(new_data,old_data)其中new_data文件夹中就存储着最终所需目的文件。
本文章不代表程序最终版本,之后作者会继续更新。