python 中对excel文件进行操作代码实例

对考试成绩的excel文件进行操作:

  1. 输出所有同学“名称:对应成绩”的信息  

  2. 输出分值最高和最低的同学名称及分数,(如有重复并列输出)

  3. 求出平均值并输出 

  4. 输出高于平均值的同学名称及成绩 

  5. 输出低于平均值的同学名称及成绩 

 6. 将成绩排名信息写入csv格式的文件中,文件名称为:test_你自己的名字_时间戳.csv 

  7. 生成一个图片,将前三名信息水印在这张图片上,将图片保存在 

# python的内置库 time
import time
# 操作excel文件的第三方库
import pandas as pd
# 用来操作表格文件的第三方库
import csv
# 操作图片的第三方库; 如果没安装使用pip安装下面
# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow
from PIL import Image, ImageDraw, ImageFont

# 操作excel文件
ff = pd.read_excel("abc.xlsx")

# 接收姓名和成绩
dict_n = {}
# 接收姓名和成绩列表套列表
data = []
# 接收所有的成绩
he = []
# 最高分
ghe = {}
# 最低分
dhe = {}
# 接收成绩后三名
zhuidi = []
# 接收成绩前三名
zhuigao = []

# 循环excel的内容
for i, j in ff.iterrows():
    # isinstance判断一个对象是不是字符串
    if isinstance(j[1], str):
        # 这一步是为了去除掉不是成绩的数据 如:(未参加等)
        continue
    else:
        # 存入
        dict_n[j[0]] = j[1]
        data.append([j[0], j[1]])

# 循环 dict_n 用。values来获取成绩存到he列表里面
for n in dict_n.values():
    he.append(n)

# 计算平均成绩
# 平均值有小数点所以用round方法限制小数后面只能有一位
# sum是求列表的和; 前提条件列表里面的都是数字
c = round(sum(he) / len(data), 1)

# 接收高于平均值的数据
a = []
# 接收都于平均值的数据
d = []
# 为什么写着两个列表; 为了输出格式好看,美观一点

# 循环便利字典的键值对; i代表键 j代表值
for i, j in dict_n.items():
    # 判断条件 大于平均值 存入a列表里
    if j > c:
        b = f"{i}{j}"
        a.append(b)
    # 判断条件 小于平均值 存入b列表里
    elif c > j:
        f = f"{i}{j}"
        d.append(f)

    # 存入数据
    ghe['高于平均值'] = a
    dhe['低于平均值'] = d

# 字典排序使用了sorted方法和匿名函数; 升序
top_scores = sorted(dict_n.items(), key=lambda x: x[1], reverse=True)

# 给定义个默认值
qian3 = None

# 循环便利字典的键值对
for i, j in dict_n.items():
    # 判断排序过的下标为0里面下标为1 的数据等不等于 j
    # 0 代表列表的第一位
    if top_scores[0][1] == j:
        # 符合条件找出最高分的成绩
        h = f"{i}{j}"
        zhuigao.append(h)
    # 判断排序过的下标为-1里面下标为1 的数据等不等于 j
    # -1 代表列表的最后一位
    elif top_scores[-1][1] == j:
        # 符合条件找出最低分的成绩
        t = f"{i}{j}"
        zhuidi.append(t)
    else:
        # 前三名和后三名的成绩 通过切片获取数据后 在 +号合并
        qian3 = top_scores[:3] + top_scores[-3:]

# 使用time模块获取时间戳
ti = time.time()

# tx变量 是当文件的名称
tx = f"test_zwj_{ti}.csv"

# 打开 CSV 文件
with open(tx, 'w', newline='') as file:
    # 创建 CSV 写入器
    writer = csv.writer(file)
    # 写入数据行
    for row in data:
        writer.writerow(row)

# 创建一张空白图片
width, height = 600, 400
image = Image.new('RGB', (width, height), color='white')

# 加载字体
font_path = 'arial.ttf'
font_size = 20
font = ImageFont.truetype(font_path, font_size)

# 准备要添加的水印文本
s = {}
for name, score in qian3:
    s[name] = score
watermark_text = str(s)

# 创建绘图对象
draw = ImageDraw.Draw(image)

# 将水印文本添加到图片上
draw.text((10, 10), watermark_text, fill='black', font=font)

# 保存图片
image.save('watermarked_image.png')

print(f'最高分:{zhuigao}')
print(f'最低分:{zhuidi}')
print(ghe)
print(dhe)
print(f'平均分:{c}')
print("图片已保存成功。")

完成!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值