>  기사  >  백엔드 개발  >  Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)

Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)

Python当打之年
Python当打之年앞으로
2023-08-09 17:34:141067검색


오늘은 자세한 설명은 하지 않겠지만, 설날에 주문받은 내용을 공유하고 원본 강좌 일정을 지정된 형식으로 출력해보겠습니다. Python

디렉토리:

1. 요구사항

2. 기능 데모

1. 수요
Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)
Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)
Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)

입력: 다음 강좌 목록입니다

월~금, 오전, 오후 수업별 수업 + 선생님 일정

Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)
과정 요약

출력 1: 각 수업의 커리큘럼

월요일부터 금요일까지 각 수업의 모든 과정 과목

Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)
수업 커리큘럼

출력 2: 각 교사의 커리큘럼

월요일부터 금요일까지 다른 반에 속한 각 선생님의 수업 일정

Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)
선생님 일정

위 출력 외에 도구 소프트웨어로 패키징해야 하므로 계정과 비밀번호를 입력해야 합니다 소프트웨어를 실행하기 위해 시작할 때 프로그램 코드에 기록된 계정 번호와 비밀번호는 다음과 같습니다!

Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)

2. 기능 시연

Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)
Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)
Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)
Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)

3.

Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)
Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)
Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)

완전한 코드가 첨부되어 있어 직접 실행하실 수 있습니다.

물론 관련 타사 라이브러리를 먼저 설치하는 것이 가장 좋습니다!

백그라운드 답글 课表解析 领取案例数据,该数据中涉及姓名均由faker라이브러리는 무작위로 생성됩니다!

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('ignore')
# 读取课程表原始数据
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 = ['班级','星期','上下午','第N节课','课程_老师']
    # data['课程_老师'] = data['课程_老师'].apply(lambda s:re.sub('上|必须|走.*','',s))
    data['课程'] = data['课程_老师'].apply(lambda s: s if '上' in s else s[:2])
    data['老师'] = data['课程_老师'].apply(lambda s: '' if '上' in s else s[2:]).str.strip().replace('','无')
    data['星期'] = data['星期'].str.strip()
    # data['课程路径'] = data['班级'].astype('str') + '班\n' + data['课程']
    
    return data

# 解析班级课表并保存
def get_class(data,path):
    wb = Workbook()
    ws = wb.active
    # 按班级
    for i in data['班级'].unique():
        result = data.query(f'班级=={i}').pivot(index=['第N节课'],columns='星期',values='课程')
        result = result[['星期一', '星期二', '星期三', '星期四', '星期五']]
        result.index = result.index.map(lambda x: f'第{x}节')
        result.index.name = ''
        result.reset_index(inplace=True)
        result = result.append(pd.Series({'':'第8节', '星期一':'班/安'}),ignore_index=True)
        # 文件名
        filename = r'按班级课程表.xlsx'
        name = f'{i}班'
        filepath = path + '/' + filename
        # 构建excel表格内容
        title = f'课程表  {name}'
        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'A{(i-1)*11+1}:F{(i-1)*11+1}')
        cell = ws[f'A{(i-1)*11+1}']
        cell.font = Font(bold=True)
        cell.alignment = Alignment(horizontal='center')
        print(f'{name} 的课表已生成')
    wb.save(filepath)

# 解析老师课表并保存
def get_teacher(data,path):
    wb = Workbook()
    ws = wb.active
    # 按老师
    for n,i in enumerate(data['老师'].unique()):
        try:
            result = data.query(f'老师=="{i}"').pivot(index=['第N节课'],columns='星期',values='班级')
        except:
            continue
        # 补全星期
        weekdays = ['星期一', '星期二', '星期三', '星期四', '星期五']
        for week in weekdays:
            if week not in result.columns:
                result[week] = ''
        result = result[weekdays]
        # 补全课时
        indexs = range(1,8)

        for index in indexs:
            if index not in result.index:
                result.loc[index,:] = ''
        result.sort_index(inplace=True)
        result.index.name = ''
        result.loc[8,:]=''
        result.reset_index(inplace=True)
        # 文件名称
        filename = r'按老师课程表.xlsx'
        name = f'{i}'
        filepath = path + '/' + filename
        # 构建excel表格内容
        value_list = []
        title1 = '任课教师'
        title2 = i
        title3 = '学科'
        title4 = data.query(f'老师=="{i}"')['课程'].unique()[0]
        title = [[title1,'',title2,'',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='')
        print(f'{name}老师 的课表已生成')     
    wb.save(filepath)  
     

# 构建GUI
layout_login = [[sg.Text('账号:'),sg.Input(key='account_id')],
                [sg.Text('密码:'),sg.Input(password_char='*', key='password')],
                [sg.Button('      确定      '), sg.Button('      关闭      ')]
                ]
w = sg.Window('请输入账号密码', layout=layout_login)
while True:
    event, values = w.read()
    if event in (None, '      关闭      '):
        sys.exit('程序关闭')
    # 判断账号密码
    elif values['account_id'] == 'admin' and values['password'] == 'admin':
        break
    else:
        sg.popup('账号密码不正确')
w.close()
layout = [[sg.Text('选择课程表原始文件')], [sg.Input(key='fileName',enable_events=True), sg.FileBrowse('打开',file_types=(("Text Files", "*.xls*"),))],
          [sg.Text('选择解析结果存储地址')], [sg.Input(key='path',enable_events=True), sg.FolderBrowse('浏览')],
          [sg.Text('程序操作记录:',justification='center')],
          [sg.Output(size=(50, 8))],
          [sg.Button('   开始处理   '), sg.Button('      关闭      ')]]

window = sg.Window('课程表解析工具', layout)
while True:
    event, values = window.read()
    if event in (None, '      关闭      '):
        break
    if event == '   开始处理   ':
        fileName = values['fileName']
        path = values['path']
        if os.path.exists(fileName) and os.path.exists(path):
            data = get_data(fileName)
            get_class(data,path)
            print('按班级课程表已经保存完毕..')
            get_teacher(data,path)
            print('按教师课程表已经保存完毕..')
        else:
            sg.popup('请选择正确的待处理文件及保存路径')
window.close()

위 내용은 이 글의 전체 내용으로, 과한 설명 없이 누구나 코드를 공부하여 학습을 심화할 수 있습니다!

물론, 코드는 단지 함수를 구현하기 위한 것일 뿐이고, 반복적으로 최적화할 수 있는 부분이 많기 때문에 여러분께 맡깁니다~

위 내용은 Python의 Excel 표 자동 처리를 위한 완전한 코드 공유(수업 일정 분석)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Python当打之年에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제