Python:简单处理表格和图片数据并初步分析

news2024/11/26 20:31:05

目录

         1.需求:

2.表格示例:

3.安装第三方库

4.代码实现 :


1.需求:

8.对周五面试结果excel表格进行操作 20分
  输出所有同学“名称:对应成绩”的信息  2分
  输出分值最高和最低的同学名称及分数,(如有重复并列输出)3分
  求出平均值并输出 2分
  输出高于平均值的同学名称及成绩 3分
  输出低于平均值的同学名称及成绩 3分
  将成绩排名信息写入csv格式的文件中,文件名称为:test_你自己的名字_时间戳.csv 3分
  生成一个图片,将前三名信息水印在这张图片上,将图片保存在 4分

2.表格示例:

3.安装第三方库

        pip install pandas numpy openpyxl

4.代码实现 :

import os
import time
import numpy
import pandas as pd
from PIL import ImageFont, ImageDraw, Image


abs_path = os.path.abspath(__file__)


def add_watermark(image_path, text, font_path, font_size=40, fill=(45, 123, 65, 128)):
    """
    在图片上添加水印
    :param image_path: 图片路径
    :param text: 水印文本
    :param font_path: 字体文件路径
    :param font_size: 字体大小,默认为 40
    :param fill: 水印颜色,默认为白色半透明
    :return: None
    """
    # 忘记参考网站了,此处是照搬完成需求
    with Image.open(image_path) as image:
        # 加载图片获得画笔
        draw = ImageDraw.Draw(image)
        width, height = image.size
        font = ImageFont.truetype(font_path, font_size)
        text_width, text_height = draw.textsize(text, font=font)
        x = int((width - text_width) / 2)
        y = int((height - text_height) / 2)
        draw.text((x, y), text, font=font, fill=fill)
        image.save(image_path)


def write_image(score_info):
    # 参考:https://blog.csdn.net/weixin_45240714/article/details/123233036
    # 设置字体,可以默认
    font = ImageFont.truetype("C:\WINDOWS\FONTS\MSYHL.TTC", 20)

    # 打开即将编辑的图片
    imageFile = "6.png"
    tp = Image.open(imageFile)

    # 在图片上添加文字
    draw = ImageDraw.Draw(tp)
    draw.text((100, 100), score_info, (255, 255, 0), font=font)
    tp.save("n.png")


def get_name_score():
    print("面试成绩输出单:")
    # content.items()  获取到每列,附带序号
    # 可以使用skip row 跳过某一行
    content = pd.read_excel('f.xlsx')
    name = [] # 学生姓名存储列表
    score = [] # 学生成绩存储列表
    real_score = []  # 用来存储有效的成绩
    real_name_score = []  # 用来存储最终有效的姓名和成绩
    max_name_score = [] # 大于平均值的数据列表
    min_name_score = [] # 小于平均值的数据列表
    for item in content.items():
        # 判断列开头以此获取指定列内容
        if item[0].startswith('2209A-P11'):
            for n in item[1]:
                name.append(n)
        else:
            for s in item[1]:
                score.append(s)
                if type(s) in [int, float]:
                    real_score.append(s)
    # 将读出来的数据利用zip函数进行重新组合
    name_score = zip(name, score)
    # zip 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
    # 平均值利用numpy实现
    score_avg = int(numpy.mean(real_score))
    print("成绩平均值是:{0}".format(score_avg))
    score_min = min(real_score)
    print("成绩最低为:{0} 分".format(score_min))
    score_max = max(real_score)
    print("成绩最高值为:{0} 分".format(score_max))
    for ns in name_score:
        if ns[1] == score_max:
            max_name_score.append(f"姓名:{ns[0]},成绩为:{ns[1]}")
        elif ns[1] == score_min:
            min_name_score.append(f"姓名:{ns[0]},成绩为:{ns[1]}")
        if type(ns[1]) in [int, float]:
            # 可以直接使条件
            # if int(ns[1]) > score_avg:
            #     score_gt_avg.append(f"姓名:{ns[0]},成绩为:{ns[1]}")
            # elif int(ns[1]) < score_avg:
            #     score_lt_avg.append(f"姓名:{ns[0]},成绩为:{ns[1]}")
            real_name_score.append([ns[0], ns[1]])
    # 也可以使用filter函数进行过滤
    # score_gt_avg = filter(lambda x: x[1] > score_avg, real_name_score)
    # score_gt_avg = [i for i in score_gt_avg]
    # 也可以使用列表推导式
    score_gt_avg = [i for i in real_name_score if i[1] > score_avg]
    score_lt_avg = [i for i in real_name_score if i[1] < score_avg]

    # 按照需求输出
    print("成绩最高的同学:{0}".format(';'.join(max_name_score)))
    print("成绩最低的同学:{0}".format(';'.join(min_name_score)))
    print("高于平均成绩的同学有:{0} 人".format(len(score_gt_avg)))
    print("高于平均成绩的同学有:", score_gt_avg)
    print("低于于平均成绩的同学有:{0} 人".format(len(score_lt_avg)))
    print("高于平均成绩的同学有:", score_lt_avg)

    # 输出到csv
    csv_name = "test_顺子老师_" + str(int(time.time())) + ".csv"
    if not os.path.exists(csv_name):
        content.to_csv(csv_name, header=['', ''], index=False, mode='w')
    # 排序并生成字符串
    sorted_real_name_score = sorted(real_name_score, key=lambda x: x[1], reverse=True)
    print(sorted_real_name_score)
    # 利用切片获取前三名和后三名,如果是在pandas里面可以使用head等方法
    final_score = sorted_real_name_score[:3] + sorted_real_name_score[-3:]
    final_score_str = []
    for score in final_score:
        final_score_str.append(score[0] + ':' + str(score[1]))

    #  图片上写字
    write_image(';'.join(final_score_str))

    # 图片水印
    add_watermark('s3.png', ';'.join(final_score_str), "C:\WINDOWS\FONTS\MSYHL.TTC", font_size=15,
                  fill=(123, 0, 0, 128))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/724412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot 中的静态资源是什么,如何使用

Spring Boot 中的静态资源是什么&#xff0c;如何使用 在 Web 应用程序中&#xff0c;静态资源通常是指不会动态生成的文件&#xff0c;例如图片、CSS、JavaScript 文件等。Spring Boot 提供了一种简单的方式来处理这些静态资源&#xff0c;让我们可以更加方便地管理和使用它们…

金融人离不开的CFA,中国人民大学与加拿大女王大学金融硕士国际班学员貌似也离不开

全球最具含金量的证书CFA证书也会被质疑你相信吗&#xff1f;号称“全球金融第一考”的CFA&#xff0c;是强化和丰富金融知识体系的。而认为这个证书只是一种背书&#xff0c;与工作实践无用的这批人&#xff0c;小编认为可能这些人也跟学历无用论是一类人。现实的他们是因为拿…

K8S-概述

k8s是什么&#xff1f; go语言开发的开源的跨主机的容器编排工具&#xff1b;全称是kubernetes&#xff1b; k8s的组件&#xff1a; master&#xff1a; ①kube-apiserver 所有服务统一的访问入口&#xff0c;无论对内还是对外&#xff1b; ②kube-controller-manager 资源…

【python系列】手把手教你在pypi发布自己的包-他人可pip下载

前言 最近在写一个接口执行引擎用作于接口自动化测试平台的核心。 看了挺多资料&#xff0c;做了挺多事情&#xff0c;学了挺多乱七八糟的知识&#xff0c;笔记记得乱糟糟的&#xff0c;以至于一直没有整理发文&#xff08;啊其实我就是懒&#xff09;&#xff0c;各位见谅。…

openkylin安装git、openssh-server

openkylin安装成功之后是没有安装git的&#xff0c;故不能clone代码 也没有安装openssh-server&#xff0c;故不能使用finalshell等工具通过ssh登录 安装git和openssh-server 打开终端&#xff1a;桌面空白处&#xff0c;右键&#xff0c;点击打开终端 输入下面的命令&…

第九章 elasticsearch集群与商品搜索

1、支持复杂的查询; 2、ES从一出生就是为分布式、集群化而 生的,不仅方便横向扩展、动态增加节点 创建索引的时候,定义3个分片,每个分片1个副本集,一个就有6个分片 如图,不论我们有多少个es实例,当用户需要对es进行增删改查的时候,连接任何一台节点都行,es内部会进行…

linux 安装中文输入法

sudo apt-get install fcitx-googlepinyin

【PAT B 1010,1011】一元多项式求导 ,A+B和C

目录 1010 一元多项式求导 1011 AB 和 C 1010 一元多项式求导 设计函数求一元多项式的导数。&#xff08;注&#xff1a;xn&#xff08;n为整数&#xff09;的一阶导数为nxn−1。&#xff09; 输入格式: 以指数递降方式输入多项式非零项系数和指数&#xff08;绝对值均为不…

Spring拦截器入门案例讲解

1.拦截器的概念 拦截器是一种动态拦截方法调用的机制&#xff0c;在SpringMVC中动态拦截控制器方法的执行。 作用 在指定的方法调用前后执行预先设定的代码阻止原始方法的执行 2.拦截器和过滤器的区别 归属不同&#xff1a;Filter属于Servlet技术&#xff0c;Interceptor属…

第二课:Figma 界面认识

创建文件 进入 Figma 后&#xff0c;可以查看最近浏览的内容&#xff0c;官方也推荐了一些基础的项目&#xff0c;点击右上角 Design file&#xff08;设计文件&#xff09;即可创建项目&#xff1b; 注&#xff1a;网页版和本地版界面样式布局一致。 创建画布 点击左上画框…

SpringBoot教学资料2-Hello SpringBoot!

Hello SpringBoot&#xff01; springboot的启动 1.创建springboot项目。注意选择spring-boot-starter-parent版本。版本兼容适配问题请看下列。 springboot1.5.9以下兼容jdk1.7 springboot2.x.x版本兼容jdk1.8 springboot3.0及以上版本兼容jdk17 springboot2.1之后的版本已…

企业微信自建应用获取登录用户敏感信息,一键授权 (python篇,详细多图)

目录 收起 企业微信自建应用配置 自建应用 构造网页授权链接 请求用户信息 补充 ACCESS_TOKEN 企业微信自建应用配置 自建应用 新建应用 企业微信管理后台——>应用管理&#xff0c;拉到最下方&#xff0c;创建应用 创建应用 配置应用 在应用管理页面点击刚才创…

jmeter 性能测试用 csv,这个坑有些扯蛋

⏩很多人在使用 jmeter 做接口测试、自动化测试和性能测试时&#xff0c;都喜欢用 CSV 数据文件设置功能&#xff0c;来读取准备好的测试数据。虽然这种方法并不是最优方案&#xff0c;在我们的性能测试课程中&#xff0c;讲解了更优的方案&#xff0c;但是&#xff0c;没有上过…

阿里云国际站:在阿里云上做开发,究竟是一种怎样的体验?

标题&#xff1a;在阿里云上做开发&#xff0c;究竟是一种怎样的体验&#xff1f;   "在阿里云上做开发&#xff0c;到底是一种什么样的体验?"这是一个我经常被问到的问题&#xff0c;今天我决定与大家深度探讨这个话题。我们知道&#xff0c;任何对用户体验的描述…

面向对象七大设计原则

更多Java知识学习 文章目录 前言一、单一职责原则定义&#xff1a;优点&#xff1a;怎么应用&#xff1f; 二、开闭原则定义优点怎么应用&#xff1f; 三、依赖倒置原则定义优点怎么应用&#xff1f; 四、接口隔离原则定义优点怎么应用&#xff1f; 五、里氏替换原则定义继承的…

对标推特,Threads横空出世,最新Threads账号注册和登录保姆级教程

Meta 正式在全球超过 100 个国家地区应用商店上线 Threads&#xff0c;一款和 Twitter 高度相似的社交软件&#xff0c;并将其定位为 Instagram 的文字对话应用。 Meta 试图以 Threads 吸引那些因马斯克决策而离开了 Twitter 的用户。 在Threads帖文中&#xff0c;扎克伯格向所…

从C语言到C++_24(二叉搜索树)概念+完整代码实现+笔试题

目录 1. 二叉搜索树&#xff08;BinarySearchTree&#xff09; 1.1 二叉搜索树的优势和劣势 二叉搜索树的时间复杂度&#xff1a;O(N) 1.2 二叉搜索树的改良 2. 二叉搜索树的实现 2.1 二叉搜索树的定义 2.2 二叉搜索树的插入 2.3 二叉搜索树的查找 2.4 二叉搜索树的删…

(汽车级)TMCS1101A3BQDRQ1、TMCS1101A3UQDRQ1隔离式霍尔效应电流传感器 6mA 8-SOIC

TMCS1101/TMCS1101-Q1精密隔离电流传感器是电隔离霍尔效应电流传感器&#xff0c;能够进行直流或交流电流测量&#xff0c;具有高精度、出色的线性度以及温度稳定性等特性。低漂移、温度补偿信号链在整个器件温度范围内具有<1.5%满量程误差。输入电流流经内部1.8mΩ导体&…

只需2行python代码,轻松将PDF转换成Word

1. pdf2docx功能 - 解析和创建页面布局- 页边距- 章节和分栏 (目前最多支持两栏布局)- 页眉和页脚 [TODO]- 解析和创建段落- OCR 文本 [TODO] - 水平&#xff08;从左到右&#xff09;或竖直&#xff08;自底向上&#xff09;方向文本- 字体样式例如字体、字号、粗/斜体、颜色…

什么是V2G充电技术?

据权威数据统计&#xff0c;截止2020年&#xff0c;我国纯电动汽车保有量已经达到400万辆。随着电动汽车保有量的快速增长&#xff0c;对电网会有一定的影响&#xff0c;电力容量需求增大&#xff0c;加剧用电峰谷差&#xff0c;对电网的冲击大&#xff0c;影响居民正常生活。这…