?第一步,先找到你浏览器的下载路径,把路径改成一个好找点的文件夹(当然了,你也可以不改)
例如,我的位置是这个:
?
?然后导入pands模块和numpy,openpyxl
在终端输入pip install 模块名字
import pandas as pd
import os
import csv
from openpyxl import Workbook
import numpy as np
address="D:/桌面文件/py666/"
sno=[]
wb = Workbook()
ws = wb.create_sheet("respect")
label=[]
label.append("学号")
for filename in os.listdir(address):
label.append(filename)
firstone=label[1]
#读取文件的名字
feature=[]
df_sno = pd.read_excel("%s%s"%(address,firstone), usecols=[1], names=None,skiprows=0) # 读取项目名称列,不要列名
df_li_sno = df_sno.values.tolist()
for s_li_sno in df_li_sno:
sno.append(s_li_sno[0])
sno.pop(1)
feature.append(sno)
for i in range(1,len(label)):
#def excel_one_line_to_list():
df = pd.read_excel("%s%s"%(address,label[i]), usecols=[9],names=None,skiprows=0) # 读取项目名称列,不要列名
df_li = df.values.tolist()
# print(df_li)
result = []
for s_li in df_li:
result.append(s_li[0])
result.pop(1)
# print(result)
feature.append(result)
print('feature:',feature)
for i in range(len(feature)):
feature[i].pop(0)
#写数据
label = np.array(label)
feature = np.array(feature)
label_input = []
for l in range(len(label)):
label_input.append(label[l])
ws.append(label_input)
for f in range(len(feature[0])):
ws.append(feature[:, f].tolist())
print('sno:',sno)
wb.save("web成绩查询.xlsx")
print("Ok,respect!!!")
注意从学习通里面导出的成绩不要做任何修改,直接放入文件夹即可
运行程序,不出意外的话,你的结果是这个样子的
,但是细心的你这个时候会发现这个里面学号的顺序和成绩表里面的顺序是不一样的(本来就是不一样)?,这个时候,你可以再新建一个excel文件,内容如下,ps:就是把你成绩表里面的学号复制过来,我这个表的名字叫:ap学号.xlsx
import pandas as pd
# 地区信息表
df_location = pd.read_excel("D:/桌面文件/ap学号.xlsx" )
df_location.head()
# 数据库导出表
df_number = pd.read_excel("web成绩查询.xlsx",sheet_name="respect")
df_number.head()
df_merge = pd.merge(left=df_location, right=df_number, left_on="学号", right_on="学号")
df_merge.head()
df_merge.to_excel("合并后的数据表.xlsx", index=False)
如果报这个错,那是可能你的excel表格打开了没有关,运行代码时就会报错?
PermissionError: [Errno 13] Permission denied: 'web成绩查询.xlsx' ?
最终代码,用这个就行
import pandas as pd
import os
from openpyxl import Workbook
import numpy as np
import pandas as pd
import xlwt
import openpyxl
kechengbiao="D:/桌面文件/WEB应用系统设计1班.xlsx"#课程表的路径
address="D:/桌面文件/py666/"#导出来文件的路径
def tran_sno_excel():#转移学号到Sheet2
data = pd.read_excel(kechengbiao, sheet_name=0, header=None,skiprows=6,usecols=[1],dtype=str,nrows=43)#43是我们班的人数
train_data = np.array(data) # np.ndarray()
excel_list = train_data.tolist() # list
print(excel_list)
print(excel_list[0][0])
print(excel_list[1][0])
print(len(excel_list))
print(len(excel_list[0]))
# 将excel转为列表
work_book = openpyxl.load_workbook(kechengbiao)#读取追加的excel
sheet = work_book['Sheet2']#确定追加的sheet
sheet.cell(row=1, column=1, value="学号")
for row in range(len(excel_list[0])):
for col in range(len(excel_list)):
sheet.cell(row=2+col,column=1,value=excel_list[col][0])#输入数据
work_book.save(kechengbiao)#追加数据
print("学号转移成功")
def first_producscore():#所有次成绩显示在python文件夹里面
sno=[]
wb = Workbook()
ws = wb.create_sheet("respect")
label=[]
label.append("学号")
for filename in os.listdir(address):
label.append(filename)
firstone=label[1]
#读取文件的名字
feature=[]
df_sno = pd.read_excel("%s%s"%(address,firstone), usecols=[1], names=None,skiprows=0) # 读取项目名称列,不要列名
df_li_sno = df_sno.values.tolist()
for s_li_sno in df_li_sno:
sno.append(s_li_sno[0])
sno.pop(1)
feature.append(sno)
for i in range(1,len(label)):
#def excel_one_line_to_list():
df = pd.read_excel("%s%s"%(address,label[i]), usecols=[9],names=None,skiprows=0) # 读取项目名称列,不要列名
df_li = df.values.tolist()
# print(df_li)
result = []
for s_li in df_li:
result.append(s_li[0])
result.pop(1)
# print(result)
feature.append(result)
# print('feature:',feature)
for i in range(len(feature)):
feature[i].pop(0)
#写数据
label = np.array(label)
feature = np.array(feature)
label_input = []
for l in range(len(label)):
label_input.append(label[l])
ws.append(label_input)
for f in range(len(feature[0])):
ws.append(feature[:, f].tolist())
# print('sno:',sno)
wb.save("成绩查询.xlsx")
print("Ok,respect,成绩生成成功,!!!")
def SnoMatch():
df_location = pd.read_excel(kechengbiao, sheet_name="Sheet2")
df_location.head()
df_number = pd.read_excel("成绩查询.xlsx", sheet_name="respect")
df_number.head()
df_merge = pd.merge(left=df_location, right=df_number, left_on="学号", right_on="学号")
df_merge.head()
df_merge.to_excel("第二个生成的学号匹配合并后的数据表.xlsx", index=False)#生成第二个学号匹配合并后的数据表
print("学号匹配合并成功")
def write_lines_excel():
data = pd.read_excel(r'第二个生成的学号匹配合并后的数据表.xlsx', sheet_name=0, header=None)
train_data = np.array(data) # np.ndarray()
excel_list = train_data.tolist() # list
del (excel_list[0]) # 去掉标题
for i in range(len(excel_list)): # 去掉学号
del (excel_list[i][0])
work_book = openpyxl.load_workbook(kechengbiao)#读取追加的excel
sheet = work_book['Sheet1']#确定追加的sheet
for row in range(len(excel_list)):
for col in range(len(excel_list[i])):
sheet.cell(row=row+7,column=col+22,value=excel_list[row][col])#输入数据,成绩插入的位置
work_book.save(kechengbiao)#追加数据
print("课程表sheet1追加成功")
def sheet3_procde():#追加所有成绩到课程设计表里面的sheet
data = pd.read_excel(r'第二个生成的学号匹配合并后的数据表.xlsx', sheet_name=0, header=None)
train_data = np.array(data) # np.ndarray()
excel_list = train_data.tolist() # list
# print(excel_list)
work_book = openpyxl.load_workbook(kechengbiao)#读取追加的excel
sheet = work_book['Sheet3']#确定追加的sheet
for row in range(len(excel_list)):
for col in range(len(excel_list[0])):
sheet.cell(row=row+1,column=col+1,value=excel_list[row][col])#输入数据
work_book.save(kechengbiao)#追加数据
print("sheet3追加成功")
if __name__ == '__main__':
tran_sno_excel()
first_producscore()
SnoMatch()
write_lines_excel()
sheet3_procde()
?
|