Python を共有します。春節期間中にアップ. リスト、オリジナルのコース概要を指定された形式で出力します。
#1. 要件
2. 機能のデモンストレーション
##3. コード
入力: これは次のコース スケジュールです。##月曜日から金曜日まで、午前と午後のコースの教師がさまざまなクラスをスケジュールします
#コース スケジュール
すべてのクラスは月曜日から金曜日まですべてコース科目
##授業カリキュラム教師のスケジュール
上記の出力に加えて、ツールにパッケージ化する必要があるため、ソフトウェア、ソフトウェア 起動時に、実行するには
#2. 機能のデモンストレーション
もちろん、最初に関連するサードパーティ ライブラリをインストールすることが最善です。
バックエンド返信
授業スケジュール分析 症例データを受け取る データに含まれる名前は、faker
ライブラリによってランダムに生成されます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>import PySimpleGUI as sg
import sys
import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment
import os
import warnings
warnings.filterwarnings(&#39;ignore&#39;)
# 读取课程表原始数据
def get_data(fileName):
df = pd.read_excel(fileName, header=[1,2,3])
data = df.melt(id_vars=df.columns[:1].to_list())
data.columns = [&#39;班级&#39;,&#39;星期&#39;,&#39;上下午&#39;,&#39;第N节课&#39;,&#39;课程_老师&#39;]
# data[&#39;课程_老师&#39;] = data[&#39;课程_老师&#39;].apply(lambda s:re.sub(&#39;上|必须|走.*&#39;,&#39;&#39;,s))
data[&#39;课程&#39;] = data[&#39;课程_老师&#39;].apply(lambda s: s if &#39;上&#39; in s else s[:2])
data[&#39;老师&#39;] = data[&#39;课程_老师&#39;].apply(lambda s: &#39;&#39; if &#39;上&#39; in s else s[2:]).str.strip().replace(&#39;&#39;,&#39;无&#39;)
data[&#39;星期&#39;] = data[&#39;星期&#39;].str.strip()
# data[&#39;课程路径&#39;] = data[&#39;班级&#39;].astype(&#39;str&#39;) + &#39;班\n&#39; + data[&#39;课程&#39;]
return data
# 解析班级课表并保存
def get_class(data,path):
wb = Workbook()
ws = wb.active
# 按班级
for i in data[&#39;班级&#39;].unique():
result = data.query(f&#39;班级=={i}&#39;).pivot(index=[&#39;第N节课&#39;],columns=&#39;星期&#39;,values=&#39;课程&#39;)
result = result[[&#39;星期一&#39;, &#39;星期二&#39;, &#39;星期三&#39;, &#39;星期四&#39;, &#39;星期五&#39;]]
result.index = result.index.map(lambda x: f&#39;第{x}节&#39;)
result.index.name = &#39;&#39;
result.reset_index(inplace=True)
result = result.append(pd.Series({&#39;&#39;:&#39;第8节&#39;, &#39;星期一&#39;:&#39;班/安&#39;}),ignore_index=True)
# 文件名
filename = r&#39;按班级课程表.xlsx&#39;
name = f&#39;{i}班&#39;
filepath = path + &#39;/&#39; + filename
# 构建excel表格内容
title = f&#39;课程表 {name}&#39;
value_list = [[title]]
value_list.append(result.columns.to_list())
temp = result.values.tolist()
temp.insert(4,[])
value_list.extend(temp)
# 写入数据
for row in value_list:
ws.append(row)
# 合并单元格
ws.merge_cells(f&#39;A{(i-1)*11+1}:F{(i-1)*11+1}&#39;)
cell = ws[f&#39;A{(i-1)*11+1}&#39;]
cell.font = Font(bold=True)
cell.alignment = Alignment(horizontal=&#39;center&#39;)
print(f&#39;{name} 的课表已生成&#39;)
wb.save(filepath)
# 解析老师课表并保存
def get_teacher(data,path):
wb = Workbook()
ws = wb.active
# 按老师
for n,i in enumerate(data[&#39;老师&#39;].unique()):
try:
result = data.query(f&#39;老师=="{i}"&#39;).pivot(index=[&#39;第N节课&#39;],columns=&#39;星期&#39;,values=&#39;班级&#39;)
except:
continue
# 补全星期
weekdays = [&#39;星期一&#39;, &#39;星期二&#39;, &#39;星期三&#39;, &#39;星期四&#39;, &#39;星期五&#39;]
for week in weekdays:
if week not in result.columns:
result[week] = &#39;&#39;
result = result[weekdays]
# 补全课时
indexs = range(1,8)
for index in indexs:
if index not in result.index:
result.loc[index,:] = &#39;&#39;
result.sort_index(inplace=True)
result.index.name = &#39;&#39;
result.loc[8,:]=&#39;&#39;
result.reset_index(inplace=True)
# 文件名称
filename = r&#39;按老师课程表.xlsx&#39;
name = f&#39;{i}&#39;
filepath = path + &#39;/&#39; + filename
# 构建excel表格内容
value_list = []
title1 = &#39;任课教师&#39;
title2 = i
title3 = &#39;学科&#39;
title4 = data.query(f&#39;老师=="{i}"&#39;)[&#39;课程&#39;].unique()[0]
title = [[title1,&#39;&#39;,title2,&#39;&#39;,title3,title4],[]]
value_list.extend(title)
value_list.append(result.columns.to_list())
temp = result.values.tolist()
temp.insert(4,[])
value_list.extend(temp)
# 写入数据
for row in range((n//4)*14+1, (n//4+1)*14+1):
for col in range(n%4*7+1, n%4*7+7):
if row == (n//4)*14+1:
a = ws.cell(row=row, column=col)
a.font = Font(bold = True)
else:
a = ws.cell(row=row, column=col)
a.alignment = Alignment(horizontal="center")
try:
ws.cell(row=row, column=col, value=value_list[row-14*(n//4)-1][col-7*(n%4)-1])
except:
ws.cell(row=row, column=col, value=&#39;&#39;)
print(f&#39;{name}老师 的课表已生成&#39;)
wb.save(filepath)
# 构建GUI
layout_login = [[sg.Text(&#39;账号:&#39;),sg.Input(key=&#39;account_id&#39;)],
[sg.Text(&#39;密码:&#39;),sg.Input(password_char=&#39;*&#39;, key=&#39;password&#39;)],
[sg.Button(&#39; 确定 &#39;), sg.Button(&#39; 关闭 &#39;)]
]
w = sg.Window(&#39;请输入账号密码&#39;, layout=layout_login)
while True:
event, values = w.read()
if event in (None, &#39; 关闭 &#39;):
sys.exit(&#39;程序关闭&#39;)
# 判断账号密码
elif values[&#39;account_id&#39;] == &#39;admin&#39; and values[&#39;password&#39;] == &#39;admin&#39;:
break
else:
sg.popup(&#39;账号密码不正确&#39;)
w.close()
layout = [[sg.Text(&#39;选择课程表原始文件&#39;)], [sg.Input(key=&#39;fileName&#39;,enable_events=True), sg.FileBrowse(&#39;打开&#39;,file_types=(("Text Files", "*.xls*"),))],
[sg.Text(&#39;选择解析结果存储地址&#39;)], [sg.Input(key=&#39;path&#39;,enable_events=True), sg.FolderBrowse(&#39;浏览&#39;)],
[sg.Text(&#39;程序操作记录:&#39;,justification=&#39;center&#39;)],
[sg.Output(size=(50, 8))],
[sg.Button(&#39; 开始处理 &#39;), sg.Button(&#39; 关闭 &#39;)]]
window = sg.Window(&#39;课程表解析工具&#39;, layout)
while True:
event, values = window.read()
if event in (None, &#39; 关闭 &#39;):
break
if event == &#39; 开始处理 &#39;:
fileName = values[&#39;fileName&#39;]
path = values[&#39;path&#39;]
if os.path.exists(fileName) and os.path.exists(path):
data = get_data(fileName)
get_class(data,path)
print(&#39;按班级课程表已经保存完毕..&#39;)
get_teacher(data,path)
print(&#39;按教师课程表已经保存完毕..&#39;)
else:
sg.popup(&#39;请选择正确的待处理文件及保存路径&#39;)
window.close()</pre><div class="contentsignin">ログイン後にコピー</div></div>
以上がこの記事の全内容です。あまり説明することなく、誰でもコードを見て学習を深めていただけます。
もちろん、コードは関数を実装するだけです。繰り返し最適化できる領域はたくさんありますが、それについてはあなたにお任せします~
以上がExcel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。