IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 快来,一起用Python制作你的核酸检测日历 -> 正文阅读

[Python知识库]快来,一起用Python制作你的核酸检测日历

坐标是深圳,2022年以来,大部分时候要求24小时,少部分时候要求48小时,更少的时候要求72小时,没有更长的情况。

本文根据我的核酸检测记录,制作成日历,将核酸检测记录可视化到日历中。

录入数据


核酸检测记录能查到的最早时间范围是一个月,以前的检测记录没有提前保存,所以先用8月份的数据制作日历。

查询8月份的检测记录,录入到代码中。

#?coding=utf-8
from?datetime?import?datetime

#?核酸检测数据,1表示当天做了核酸,0表示当天未做核酸
my_nucleic?=?{
????'date':?[datetime.strftime(datetime(2022,?8,?i+1),?'%Y-%m-%d')?for?i?in?range(31)],
????'nucleic':?[1,?1,?0,?1,?0,?1,?0,?1,?0,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1,?1]
}

如果当天做了核酸,用1表示,如果当天未做核酸,用0表示。

8月的日期使用Python标准库datetime生成。

制作日历


本文使用Python库openpyxl在excel表格中生成日历。

1.使用openpyxl创建表格

import?openpyxl

#?创建一个workbook对象,而且会在workbook中至少创建一个表worksheet
wb?=?openpyxl.Workbook()
#?获取当前活跃的worksheet,默认就是第一个worksheet
ws?=?wb.active

openpyxl是Python中用于读写excel文件的库,pip install openpyxl安装即可使用。

2. 定义表格初始化和单元格设置的函数

from?openpyxl.styles?import?PatternFill,?Font,?Alignment,?Border,?Side

def?init_sheet(ws):
????for?r?in?range(100):
????????for?c?in?range(100):
????????????ws.cell(row=r+1,?column=c+1).fill?=?PatternFill('solid',?fgColor='000000')


def?set_cell_style(ws,?r,?c,?color):
????ws.cell(row=r,?column=c).fill?=?PatternFill('solid',?fgColor=color)
????ws.cell(row=r,?column=c).font?=?Font(name="微软雅黑",?size=14,?bold=True)
????ws.cell(row=r,?column=c).alignment?=?Alignment(horizontal='right',?vertical='center')
????side?=?Side(style="medium",?color="004B3C")
????ws.cell(row=r,?column=c).border?=?Border(top=side,?bottom=side,?left=side,?right=side)

定义一个将表格颜色填充成白色的函数,对表格初始化处理,将背景设置成纯白,日历看起来更美观。

定义一个用于处理单元格格式的函数,后面直接调用函数给单元格设置格式,方便重复使用。

3. 实现日历

import?calendar

#?将表格填充成白色
init_sheet(ws)
#?设置年月单元格的边框
side?=?Side(style="medium",?color="004B3C")
for?col?in?range(7):
????ws.cell(row=1,?column=col+1).border?=?Border(top=side,?bottom=side,?left=side,?right=side)
#?合并年月单元格
ws.merge_cells(start_row=1,?start_column=1,?end_row=1,?end_column=7)
#?写入内容和设置格式
ws.cell(row=1,?column=1).value?=?'2022年8月'
set_cell_style(ws,?r=1,?c=1,?color='418CFA')
#?写入星期一至星期日,并设置格式
title_data?=?['星期一',?'星期二',?'星期三',?'星期四',?'星期五',?'星期六',?'星期日']
for?col?in?range(7):
????ws.cell(row=2,?column=col+1).value?=?title_data[col]
????set_cell_style(ws,?r=2,?c=col+1,?color='418CFA')
#?获取一个月的天数和第一天是星期几
monthday?=?calendar.monthrange(2022,?8)
#?设置日历的日期
col,?row?=?monthday[0],?3
for?i?in?range(len(my_nucleic['date'])):
????if?col?<?7:
????????ws.cell(row=row,?column=col?+?1).value?=?i+1
????????col?+=?1
????else:
????????col?=?0
????????row?+=?1
????????ws.cell(row=row,?column=col?+?1).value?=?i+1
????????col?+=?1
????#?设置单元格格式
????set_cell_style(ws,?r=row,?c=col,?color='000000')
????#?根据核酸结果填充颜色
????if?my_nucleic['nucleic'][i]?==?1:
????????ws.cell(row=row,?column=col).fill?=?PatternFill('solid',?fgColor='009B3C')
#?设置行高
for?i?in?range(1,?row+1):
????ws.row_dimensions[i].height?=?30
#?保存表格
wb.save(filename='show_august_nucleic.xlsx')
wb.close()

日历效果:


?

可以看到,8月份我只有4天没有做核酸,大部分时间都是保持24小时。

代码实现介绍:

  • 先合并首行的前7列单元格,写入年月,然后在第二行从左到右写入星期一到星期日,并设置格式。

  • 使用Python的日历库calendar返回当前月第一天是星期几,然后确定日历的1号的起始位置。

  • 从1号开始,依次在excel中写入日期,当列到达星期日时,换行并回到星期一的列。

  • 根据当天是否做了核酸,给单元格填充背景颜色。本文中如果当天做了核酸,则日期的背景设置为绿色(24小时核酸码的颜色),如果未做核酸,则日期的背景设置为白色。

  • 最后将结果保存到excel文件中,打开excel文件即可看到制作的日历。

制作一年的日历


制作了一个月的日历后,继续扩展做一年的日历,先看一下效果:


?

?

实现方式介绍:

  • 数据补充,由于只能查到一个月的核酸记录,所以本文除2022年8月外,其他月份的数据用随机数生成。

  • 对制作一个月日历的代码进行封装,传入年和月,就可以生成任意一个月的日历。

  • 在excel文件中,自己设计一排展示几个月,本文一排展示3个月。并计算每个月日历的起始单元格位置。

  • 最后传入年份,依次将一年12个月的日历制作出来,展示在一个页面上。只要有数据,可以对任意一年的日历进行可视化。(代码较长,可在文末获取完整代码)

按年的另一种展示方式:

from?pyecharts?import?options?as?opts
from?pyecharts.charts?import?Calendar
import?pandas?as?pd

nucleic_df?=?pd.DataFrame()
for?i?in?range(12):
????month_nucleic?=?made_data(2022,?i+1)
????month_df?=?pd.DataFrame(month_nucleic)
????nucleic_df?=?pd.concat([nucleic_df,?month_df])
data?=?[[row_data['date'],?row_data['nucleic']]?for?row_index,?row_data?in?nucleic_df.iterrows()]
cal?=?Calendar(init_opts=opts.InitOpts(width='900px',?height='500px'))
cal.add(
????'',?data,?calendar_opts=opts.CalendarOpts(range_="2022",
????????????????????????????daylabel_opts=opts.CalendarDayLabelOpts(first_day=1,?name_map='cn'))
).set_series_opts(
????label_opts=opts.LabelOpts(font_size=12)
).set_global_opts(
????title_opts=opts.TitleOpts(title='核酸检测日历',?pos_left='450',?pos_top='0',
????????title_textstyle_opts=opts.TextStyleOpts(color='black',?font_size=16)),
????visualmap_opts=opts.VisualMapOpts(
????????max_=1,?min_=0,?orient="horizontal",?is_piecewise=False,
????????range_color=["white",?"white",?"green"],?pos_top="250px",?pos_left='50px'
????),
).render('my_nucleic.html')

日历效果:


?

pyecharts中的Calendar组件也可以实现日历可视化,不过格式比较固定,展示得比较密集。

总结


  • 本文用python制作了核酸检测的日历,对核酸检测的天数进行可视化。
  • 本文用了两种方式实现一年的日历展示。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:10:10  更:2022-09-13 11:11:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:26:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码