在python中对excel文件进行操作

         这个是实现查看excel文件中学生成绩的平均分、最高分、最低分、高于平均分的学生和低于平均分的学生、查找最高分的学生和最低分的学生、前三名、将成绩排名信息写入csv格式的文件中、将前三名学生在图片中水印显示。

pandas:

        Pandas是一种流行的开源Python库,用于数据处理、分析和预处理。它提供高性能、易于使用的数据结构和数据分析工具,用于处理结构化数据。

csv:

        csv模块是Python的内置模块,用于读取和写入CSV(逗号分隔值)文件。它提供了一组函数和类,使您能够轻松地处理CSV文件中的数据。

datetime:

        datetime模块是Python的内置模块,用于处理日期和时间。它提供了一组类和函数,使您能够创建、操作和格式化日期和时间对象。

PIL:

        PIL 是一个广泛使用的第三方图像处理库,用于在Python中处理和操作图像。

isinstance:

        isinstance() 是一个内置函数,用于检查一个对象是否属于指定的类型。

enumerate:

        enumerate() 是一个内置函数,用于将一个可迭代对象组合为一个索引序列,同时返回索引和对应的元素值。

sorted:

        sorted() 是一个内置函数,用于对可迭代对象进行排序并返回一个新的排序后的列表。

代码在下面:

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

# 读取Excel文件
try:
    df = pd.read_excel("你的excel文件名字.xlsx")
except FileNotFoundError:
    print("文件未找到,请确认文件路径是否正确。")
    exit()

dict_n = {}
l1 = []
l2 = []
data = []
for i, j in df.iterrows():
    # 判断是否为字符串
    if isinstance(j[1], str):
        continue
    else:
        l1.append(j[0])
        l2.append(j[1])
        data.append([j[0], j[1]])

# 计算最低分和最高分
min_score = min(l2)
max_score = max(l2)
# 平均分
c = round(sum(l2) / len(l2), 1)

# 根据分数获取分数最高和最低的同学的名称及分数
highest_students = [name for index, name in enumerate(l1) if l2[index] == max_score]
lowest_students = [name for index, name in enumerate(l1) if l2[index] == min_score]


dict2 = {}  # 存储高于平均值的同学
dict3 = {}  # 存储低于平均值的同学

for index, n in enumerate(l2):
    if n > c:
        dict2[l1[index]] = n  # 将高于平均值的同学和分数添加到字典中
    else:
        dict3[l1[index]] = n  # 将低于平均值的同学和分数添加到字典中

print(f'平均分:{c}')
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}")

# 生成时间戳
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
output_filename = f"csv文件的名字.csv"

# 打开 CSV 文件并写入数据
with open(output_filename, 'w', encoding='utf-8' , newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)

# 使用sorted函数按分数降序排序字典数据
top_scores = sorted(data, key=lambda x: x[1], reverse=True)
# 获取前三名的学生姓名和分数
top_three = top_scores[:3]
print(top_three)

# 创建空白图片
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 top_three])
# 在图片上绘制水印文本
draw.text((100, 270), text, fill=(0, 0, 0), font=font)
# 保存生成的图片
image.save("image1.png")
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值