python获取xlsx表数据在csv中打印以及生成水印图片

目录

需导入的包

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

输出分值最高和最低的同学名称及分数

求出平均值并输出

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

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


需导入的包

使用了大量的pandas原生库

#pandas库中的各种功能和方法来处理和分析数据了。命名为pd
import pandas as pd
#它们分别用于处理图像、绘制图像和操作字体
from PIL import Image, ImageDraw, ImageFont
from datetime import datetime

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

skiprows能够跳过第一行,就是不哪一行可以跳过

# 读取Excel文件时跳过第一行(索引0)
df = pd.read_excel('表名.xlsx', skiprows=1)
# 输出所有同学“名称:对应成绩”的信息
for index, row in df.iterrows():
    print(f"{row['姓名']}: {row['成绩']}")

输出分值最高和最低的同学名称及分数

# 成绩列中存在字符串值,而 ‘min(),max()’ 函数无法处理字符串值。

可以先将成绩列转换为数值类型。

df['成绩'] = pd.to_numeric(df['成绩'], errors='coerce')

# 查找分值最低和最高的同学

min_score = df['成绩'].min()
max_score = df['成绩'].max()
min_students = df[df['成绩'] == min_score][['姓名', '成绩']]
max_students = df[df['成绩'] == max_score][['姓名', '成绩']]
print("分值最低的同学:")
for index, row in min_students.iterrows():
    print(f"{row['姓名']}: {row['成绩']}")
print("分值最高的同学:")
for index, row in max_students.iterrows():
    print(f"{row['姓名']}: {row['成绩']}")

求出平均值并输出

# 计算平均分数,第二行保留两位小数

average_score = df['成绩'].mean()
average_score = round(average_score, 2)
print("平均分数:", average_score)

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

above_average = df.loc[df['成绩'] > average_score, ['姓名', '成绩']]
print("高于平均值的同学和成绩:")
for index, row in above_average.iterrows():
    print(f"{row['姓名']}: {row['成绩']}")

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

below_average = df.loc[df['成绩'] < average_score, ['姓名', '成绩']]
print("低于平均值的同学和成绩:")
for index, row in below_average.iterrows():
    print(f"{row['姓名']}: {row['成绩']}")

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

# 排序成绩

sorted_df = df.sort_values(by='成绩', ascending=False)

# 获取当前时间戳

timestamp = datetime.now().strftime("%Y%m%d%H%M%S")

# 构造文件名

filename = f"zss_{timestamp}.csv"

# 将成绩排名信息写入CSV文件

sorted_df.to_csv(filename, index=False)
print(f"已将成绩排名信息写入文件: {filename}")

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

# 读取数据和原始图片

image_path = "OIP-C.jpg"  # 你的背景图片路径
image = Image.open(image_path)

# 排序成绩

sorted_df = df.sort_values(by='成绩', ascending=False)
top_three = sorted_df.head(3)

# 创建一个可以用于添加文本的ImageDraw对象

draw = ImageDraw.Draw(image)

# 设置字体、字号、颜色和位置

font_path = 'C:/Windows/Fonts/simhei.ttf'  # 你的字体文件路径
font = ImageFont.truetype(font_path, size=50)
text_color = (0, 0, 0)  # 黑色
text_position = (50, 50)  # 文本起始位置

# 添加前三名信息水印

for i, (_, row) in enumerate(top_three.iterrows()):
    name = row['姓名']
    score = row['成绩']
    text = f"{i+1}. {name}: {score}"
    draw.text(text_position, text, fill=text_color, font=font)
    text_position = (text_position[0], text_position[1] + 50)  # 下移一行

# 构造文件名

filename = f"zss_{timestamp}.jpg"

# 保存生成的图片

image.save(filename)
print(f"已生成带有前三名信息水印的图片并保存为: {filename}")

排序,最大值最小值另一种方法

list1 = [25, 87, 46, 68, 32]
average = sum(list1) / len(list1)
print(average)
sort = sorted(list1, reverse=True)
print(sort)
for i in list1:
    if i == min(list1):
        print('最小', i)
    if i == max(list1):
        print('最大', i)
    if i < average:
        print('小于平均值', i)
    if i > average:
        print('大于平均值', i)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值