Python 编程案例:谁没交论文?输出并生成电子表格

简介: Python 编程案例:谁没交论文?输出并生成电子表格

Python 编程案例:谁没交论文?输出并生成电子表格
在工作或者学习中经常会对文件进行分类,比方说按姓名分类(也可以有其他分类,在此举例用姓名),就是以姓名建文件夹,然后把该人的文件存到相应姓名的文件夹中。结合真实案例,眼下正是一年的毕业季,很多大学的毕业生都需要提交论文报告。比方说所有的文件夹都在目录 /Users/liuxiaowei/project 下,每位同学都需要上交4份文件:开题报告 、中期报告、任务书、指导记录表。发现有些同学缺失一些文件,我们需要将谁缺少哪种文件找出来。如果人很多的情况下,这也是不小的工作量。但是利用Python编程进行统计并输出就很容易了。

  • macOS Monterey Version 12.3.1 系统
  • Pycharm 2020.1

下面分享一下我的代码:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :4/6/22 9:54 PM
# 文件      :谁没交论文.py
# IDE      :PyCharm

# 新建包含所有论文报告名称的列表
all_report_Lst = ['开题报告', '中期报告', '任务书', '指导记录表']

# 导入模块
import os
import csv
from openpyxl import Workbook

# 获取全体人员名单列表
allPersons = os.listdir('/Users/liuxiaowei/project')
path = '/Users/liuxiaowei/project'

# 定义一个函数,人为参数,返回每个人的所有报告
def every_person_report(person):
    all_reports = []  # 定义一个空列表,添加报告名,因为每个人的文件夹下的文件包含"_人名"
    targetPath = os.path.join(path, person)
    # 每个人的报告列表
    all_reports_files = os.listdir(targetPath)
    for report in all_reports_files:
        all_reports.append(report.split('_')[0])   # split()函数取报告名称,去掉人名
    return all_reports
# 新建一个工作簿
wb = Workbook()
ws = wb.active
# 设定默认表单名称
ws.title = '没交报告的人员集报告名称'

# 定义一个输出没有上交的报告的函数,人名和人的已上交的报告为参数
def not_in_report(person, reports):

    for item in all_report_Lst:
        if item not in reports:
            # 向表单添加数据
            ws.append([person, item])
            print(f'{person}没有交{item}')
    # 保存并输出点子表格
    wb.save('没交论文的名单.xlsx')

# 主程序
if __name__ == '__main__':
    for person in allPersons:
        if person == '.DS_Store':  # 因为项目文件夹下存在这个隐藏文件名,所以要跳过
            continue
        if len(every_person_report(person)) == 4:
            print(f'{person}全部交完!')
           # continue     # 只显示没交的报告名
        else:
            not_in_report(person, every_person_report(person))

运行结果如下:

/Users/liuxiaowei/PycharmProjects/夜曲编程/venv/bin/python /Users/liuxiaowei/PycharmProjects/夜曲编程/谁没交论文.py
陈大和没有交指导记录表
杨朝全没有交开题报告
蒙洁没有交开题报告
苑维玮全部交完!
吴瑞斌全部交完!
曾凤鸣没有交开题报告
曾凤鸣没有交任务书
曾凤鸣没有交指导记录表
倪淑婷没有交中期报告
佟喜全部交完!
金泰佑没有交指导记录表
丁群群没有交开题报告
何昭华没有交任务书
何昭华没有交指导记录表
承亚全部交完!
盛远全部交完!
宋灏全部交完!
许明峰没有交指导记录表
王伯春没有交开题报告
王伯春没有交任务书
何志利没有交开题报告
翟程程全部交完!
刘文彦全部交完!
廖舒婷没有交开题报告
鲁志林全部交完!
赵彩玉全部交完!
党晖没有交中期报告
杨成连没有交中期报告
张成芝没有交任务书
董蔚全部交完!
陈敬泽全部交完!
贾婧全部交完!
马铭璐没有交指导记录表
徐奇伟全部交完!
谢旺良没有交中期报告
陈元丰全部交完!
高庆山全部交完!
范广梅没有交中期报告
范广梅没有交任务书
周延飞全部交完!
黄晓腾没有交任务书
张卫霞没有交开题报告
蒋建和没有交开题报告
石少军没有交开题报告
贺友良没有交中期报告
贺友良没有交任务书
邢天宇没有交开题报告
任永信没有交指导记录表
吴婷娟没有交开题报告
马丹艳没有交任务书
张雄明全部交完!
徐秋海全部交完!
钟炫没有交开题报告
钟炫没有交中期报告
石卫峰全部交完!
刘亦兵全部交完!
陈紫琦没有交指导记录表
王布和没有交中期报告
林思蓉没有交任务书
许罗全部交完!
李显贵全部交完!
陆根良没有交开题报告
陆根良没有交中期报告
罗先芝全部交完!
谢炳荣没有交任务书
王雨坤没有交中期报告
王雨坤没有交指导记录表

如下图生成电子表格文件:

image.png
image.png

相关文章
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1879 102
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
614 104
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
494 103
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
653 3
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
871 3
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
720 3
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
1018 0
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
538 82
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
974 33

推荐镜像

更多