excel表格操作讲解

import pandas as pd
import csv
import datetime
from PIL import Image, ImageDraw, ImageFont

# 读取Excel文件
try:
    # read_excel() 是 pandas 库中用于读取Excel文件的函数。
    # 它可以从Excel文件中读取数据,并将其转换为Pandas的DataFrame数据结构
    df = pd.read_excel("2209A2361-第一轮面试成绩.xlsx")
except FileNotFoundError:
    print("文件未找到,请确认文件路径是否正确。")
    exit()

data_name = []
data_grade = []
data = []
# iterrows()是pandas中用于迭代DataFrame行的方法。
# 它允许你按行遍历DataFrame,并针对每一行执行操作
for i, j in df.iterrows():
    # 判断是否为字符串
    if isinstance(j[1], str):
        continue
    else:
        data_name.append(j[0])
        data_grade.append(j[1])
        data.append([j[0], j[1]])

# 计算最低分和最高分
min_score = min(data_grade)
max_score = max(data_grade)
# 平均分
# round() 是Python内置的函数,用于对数字进行四舍五入
retain_name = round(sum(data_grade) / len(data_grade), 1)


# 根据分数获取分数最高和最低的同学的名称及分数
highest_students = [name for name, score in zip(data_name, data_grade) if score == max_score]
lowest_students = [name for name, score in zip(data_name, data_grade) if score == min_score]

dict2 = {}  # 存储高于平均值的同学和分数的字典
dict3 = {}  # 存储低于平均值的同学和分数的字典

# enumerate() 是Python内置的函数,用于在迭代器过程中同时获取索引和元素
for index, n in enumerate(data_grade):
    if n > retain_name:
        dict2[data_name[index]] = n  # 将高于平均值的同学和分数添加到字典中
    else:
        dict3[data_name[index]] = n  # 将低于平均值的同学和分数添加到字典中

### 将成绩排名信息写入csv格式的文件中,文件名称为:test_你自己的名字_时间戳.csv ###
date = datetime.datetime.utcnow().timestamp()  # 当前时间戳
file_name = f'test_鲁健_{date}.csv'

try:
    with open(file_name, 'w', encoding='utf-8', newline='') as file:
        writer = csv.writer(file)
        writer.writerows(data)
except IOError:
    print('I/O error')

### 生成一个图片,将前三名信息水印在这张图片上,将图片保存 ###
sorted_lst = sorted(data, key=lambda x: x[1], reverse=True)[:4]
print(sorted_lst)

# 创建空白图片
image = Image.new('RGB', (800, 600), (255, 255, 255))
# 绘制图像内容
draw = ImageDraw.Draw(image)
draw.rectangle([(100, 100), (700, 500)], fill=(0, 0, 255))  # 画一个蓝色矩形
# 设置字体和字色
font = ImageFont.truetype('C:/Windows/Fonts/simsun.ttc', 24)
# 设置水印文本
text = '学生姓名:' + '、'.join([name for name, _ in sorted_lst])
# 在图片上绘制水印文本
draw.text((100, 270), text, fill=(0, 0, 0), font=font)
# 保存生成的图片
image.save('image01.jpg')

# print(f'平均分:{retain_name}')
# print(f"最低分:{min_score}")
# print(f"最高分:{max_score}")
# print(f"分值最高的同学:{', '.join(highest_students)},分数:{max_score}")
# print(f"分值最低的同学:{', '.join(lowest_students)},分数:{min_score}")
# print(f"高于平均值:{dict2}")
# print(f"低于平均值:{dict3}")

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值