Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有

リリース: 2023-08-09 17:34:14
転載
985 人が閲覧しました


今日は詳しく説明する代わりに、私が選んだ

Python を共有します。春節期間中にアップ. リスト、オリジナルのコース概要を指定された形式で出力します。

#ディレクトリ:

#1. 要件

2. 機能のデモンストレーション

##3. コード

Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有##1. 要件
Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有

入力: これは次のコース スケジュールです。##月曜日から金曜日まで、午前と午後のコースの教師がさまざまなクラスをスケジュールします

#コース スケジュール

Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
出力 1: 各クラスのカリキュラム スケジュール

すべてのクラスは月曜日から金曜日まですべてコース科目

##授業カリキュラム

Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
成果 2: 各教師のカリキュラム
##コース月曜日から金曜日までの異なるクラスに属する各教師のスケジュール

教師のスケジュール

上記の出力に加えて、ツールにパッケージ化する必要があるため、ソフトウェア、ソフトウェア 起動時に、実行するには

アカウント番号とパスワードを入力する必要があります。プログラム コードに書き込まれたアカウント番号とパスワードは次のとおりです。 Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有

#2. 機能のデモンストレーション

Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
#3. コード
Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
Excel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有
##完全なコードが添付されているので、直接実行できます。

もちろん、最初に関連するサードパーティ ライブラリをインストールすることが最善です。

バックエンド返信

授業スケジュール分析

症例データを受け取る データに含まれる名前は、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(&amp;#39;ignore&amp;#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 = [&amp;#39;班级&amp;#39;,&amp;#39;星期&amp;#39;,&amp;#39;上下午&amp;#39;,&amp;#39;第N节课&amp;#39;,&amp;#39;课程_老师&amp;#39;] # data[&amp;#39;课程_老师&amp;#39;] = data[&amp;#39;课程_老师&amp;#39;].apply(lambda s:re.sub(&amp;#39;上|必须|走.*&amp;#39;,&amp;#39;&amp;#39;,s)) data[&amp;#39;课程&amp;#39;] = data[&amp;#39;课程_老师&amp;#39;].apply(lambda s: s if &amp;#39;上&amp;#39; in s else s[:2]) data[&amp;#39;老师&amp;#39;] = data[&amp;#39;课程_老师&amp;#39;].apply(lambda s: &amp;#39;&amp;#39; if &amp;#39;上&amp;#39; in s else s[2:]).str.strip().replace(&amp;#39;&amp;#39;,&amp;#39;无&amp;#39;) data[&amp;#39;星期&amp;#39;] = data[&amp;#39;星期&amp;#39;].str.strip() # data[&amp;#39;课程路径&amp;#39;] = data[&amp;#39;班级&amp;#39;].astype(&amp;#39;str&amp;#39;) + &amp;#39;班\n&amp;#39; + data[&amp;#39;课程&amp;#39;] return data # 解析班级课表并保存 def get_class(data,path): wb = Workbook() ws = wb.active # 按班级 for i in data[&amp;#39;班级&amp;#39;].unique(): result = data.query(f&amp;#39;班级=={i}&amp;#39;).pivot(index=[&amp;#39;第N节课&amp;#39;],columns=&amp;#39;星期&amp;#39;,values=&amp;#39;课程&amp;#39;) result = result[[&amp;#39;星期一&amp;#39;, &amp;#39;星期二&amp;#39;, &amp;#39;星期三&amp;#39;, &amp;#39;星期四&amp;#39;, &amp;#39;星期五&amp;#39;]] result.index = result.index.map(lambda x: f&amp;#39;第{x}节&amp;#39;) result.index.name = &amp;#39;&amp;#39; result.reset_index(inplace=True) result = result.append(pd.Series({&amp;#39;&amp;#39;:&amp;#39;第8节&amp;#39;, &amp;#39;星期一&amp;#39;:&amp;#39;班/安&amp;#39;}),ignore_index=True) # 文件名 filename = r&amp;#39;按班级课程表.xlsx&amp;#39; name = f&amp;#39;{i}班&amp;#39; filepath = path + &amp;#39;/&amp;#39; + filename # 构建excel表格内容 title = f&amp;#39;课程表 {name}&amp;#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&amp;#39;A{(i-1)*11+1}:F{(i-1)*11+1}&amp;#39;) cell = ws[f&amp;#39;A{(i-1)*11+1}&amp;#39;] cell.font = Font(bold=True) cell.alignment = Alignment(horizontal=&amp;#39;center&amp;#39;) print(f&amp;#39;{name} 的课表已生成&amp;#39;) wb.save(filepath) # 解析老师课表并保存 def get_teacher(data,path): wb = Workbook() ws = wb.active # 按老师 for n,i in enumerate(data[&amp;#39;老师&amp;#39;].unique()): try: result = data.query(f&amp;#39;老师==&quot;{i}&quot;&amp;#39;).pivot(index=[&amp;#39;第N节课&amp;#39;],columns=&amp;#39;星期&amp;#39;,values=&amp;#39;班级&amp;#39;) except: continue # 补全星期 weekdays = [&amp;#39;星期一&amp;#39;, &amp;#39;星期二&amp;#39;, &amp;#39;星期三&amp;#39;, &amp;#39;星期四&amp;#39;, &amp;#39;星期五&amp;#39;] for week in weekdays: if week not in result.columns: result[week] = &amp;#39;&amp;#39; result = result[weekdays] # 补全课时 indexs = range(1,8) for index in indexs: if index not in result.index: result.loc[index,:] = &amp;#39;&amp;#39; result.sort_index(inplace=True) result.index.name = &amp;#39;&amp;#39; result.loc[8,:]=&amp;#39;&amp;#39; result.reset_index(inplace=True) # 文件名称 filename = r&amp;#39;按老师课程表.xlsx&amp;#39; name = f&amp;#39;{i}&amp;#39; filepath = path + &amp;#39;/&amp;#39; + filename # 构建excel表格内容 value_list = [] title1 = &amp;#39;任课教师&amp;#39; title2 = i title3 = &amp;#39;学科&amp;#39; title4 = data.query(f&amp;#39;老师==&quot;{i}&quot;&amp;#39;)[&amp;#39;课程&amp;#39;].unique()[0] title = [[title1,&amp;#39;&amp;#39;,title2,&amp;#39;&amp;#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=&quot;center&quot;) 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=&amp;#39;&amp;#39;) print(f&amp;#39;{name}老师 的课表已生成&amp;#39;) wb.save(filepath) # 构建GUI layout_login = [[sg.Text(&amp;#39;账号:&amp;#39;),sg.Input(key=&amp;#39;account_id&amp;#39;)], [sg.Text(&amp;#39;密码:&amp;#39;),sg.Input(password_char=&amp;#39;*&amp;#39;, key=&amp;#39;password&amp;#39;)], [sg.Button(&amp;#39; 确定 &amp;#39;), sg.Button(&amp;#39; 关闭 &amp;#39;)] ] w = sg.Window(&amp;#39;请输入账号密码&amp;#39;, layout=layout_login) while True: event, values = w.read() if event in (None, &amp;#39; 关闭 &amp;#39;): sys.exit(&amp;#39;程序关闭&amp;#39;) # 判断账号密码 elif values[&amp;#39;account_id&amp;#39;] == &amp;#39;admin&amp;#39; and values[&amp;#39;password&amp;#39;] == &amp;#39;admin&amp;#39;: break else: sg.popup(&amp;#39;账号密码不正确&amp;#39;) w.close() layout = [[sg.Text(&amp;#39;选择课程表原始文件&amp;#39;)], [sg.Input(key=&amp;#39;fileName&amp;#39;,enable_events=True), sg.FileBrowse(&amp;#39;打开&amp;#39;,file_types=((&quot;Text Files&quot;, &quot;*.xls*&quot;),))], [sg.Text(&amp;#39;选择解析结果存储地址&amp;#39;)], [sg.Input(key=&amp;#39;path&amp;#39;,enable_events=True), sg.FolderBrowse(&amp;#39;浏览&amp;#39;)], [sg.Text(&amp;#39;程序操作记录:&amp;#39;,justification=&amp;#39;center&amp;#39;)], [sg.Output(size=(50, 8))], [sg.Button(&amp;#39; 开始处理 &amp;#39;), sg.Button(&amp;#39; 关闭 &amp;#39;)]] window = sg.Window(&amp;#39;课程表解析工具&amp;#39;, layout) while True: event, values = window.read() if event in (None, &amp;#39; 关闭 &amp;#39;): break if event == &amp;#39; 开始处理 &amp;#39;: fileName = values[&amp;#39;fileName&amp;#39;] path = values[&amp;#39;path&amp;#39;] if os.path.exists(fileName) and os.path.exists(path): data = get_data(fileName) get_class(data,path) print(&amp;#39;按班级课程表已经保存完毕..&amp;#39;) get_teacher(data,path) print(&amp;#39;按教师课程表已经保存完毕..&amp;#39;) else: sg.popup(&amp;#39;请选择正确的待处理文件及保存路径&amp;#39;) window.close()</pre><div class="contentsignin">ログイン後にコピー</div></div>以上がこの記事の全内容です。あまり説明することなく、誰でもコードを見て学習を深めていただけます。

もちろん、コードは関数を実装するだけです。繰り返し最適化できる領域はたくさんありますが、それについてはあなたにお任せします~

以上がExcel テーブルの Python 自動処理 (授業スケジュール分析) の完全なコード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:Python当打之年
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!