iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何使用python自动生成日历
  • 384
分享到

如何使用python自动生成日历

2023-06-14 20:06:47 384人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关如何使用python自动生成日历的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设

这篇文章给大家分享的是有关如何使用python自动生成日历的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Python是什么意思

Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本,随着版本的不断更新和新功能的添加,常用于用于开发独立的项目和大型项目。

效果

如何使用python自动生成日历

excel日历模板的基础上,生成带有农历日期、节假日、休班等信息的日历,解决DIY日历最大的技术难题。

图中日期,第一行为公历,第二行为节假日,第三行为农历,第四行是其他特别的日子,比如生日、纪念日等。

特点

  • 使用门槛低

Python + Excel,会运行Python脚本,会使用Excel即可上手。

  • 步骤简单

只需要修改Excel的年份(在一月份表头修改),运行一次脚本

  • 可扩展

可制作任意年份的日历(修改年份即可)

  • 可定制

可以添加其他特殊日期

使用手册

第一步,修改日历年份及样式

打开calendar.xlsx文件,在一月份表头,”输入年份“位置,修改样式

第二步,添加自定义日期

calendar.xlsx文件的生日栏,添加需要标注的日期,并保存

第三部,运行脚本

主要代码

BdDataFetcher.py

#!/usr/bin/python3# -*- coding: UTF-8 -*-import datetimeimport loggingimport timeimport requestsimport reimport JSONclass BdDataFetcher(object):    def __init__(self):        self.url = 'https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.PHP'        self.request_session = requests.session()        self.request_session.headers = {            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/84.0.4147.135 Safari/537.36",            "Accept": "application/json, text/plain, */*",            "Accept-Encoding": "gzip, deflate",            "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",            "Connection": "keep-alive"        }    def request(self, year_month):        payload = {            'query': year_month,            'resource_id': 39043,            't': int(round(time.time() * 1000)),            'ie': 'utf8',            'oe': 'utf8',            'cb': 'op_aladdin_callback',            'fORMat': 'json',            'tn': 'wisetpl',            'cb': 'Jquery110206747607329442493_1606743811595',            '_': 1606743811613        }        resp = self.request_session.get(url=self.url, params=payload)        logging.debug('data fetcher resp = {}'.format(resp.text))        bracket_pattern = re.compile(r'[(](.*?)[)]', re.S)        valid_data = re.findall(bracket_pattern, resp.text)        json_data = json.loads(valid_data[0])        almanac = json_data['data'][0]['almanac']        result = {}        for day in almanac:            key = '{}-{}-{}'.format(day['year'], day['month'],day['day'])            result[key] = day        return resultif __name__ == '__main__':    logging.basicConfig(level=logging.DEBUG,                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',                        datefmt='%a, %d %b %Y %H:%M:%S')    BdDataFetcher().request('2021年1月')

ExcelDateFiller.py

#!/usr/bin/python3# -*- coding: UTF-8 -*-import loggingimport osimport sysfrom copy import copyimport openpyxlimport pandas as pandasimport xlrdimport xlutilsimport yamlfrom pandas._libs.tslibs.timestamps import Timestampfrom BdDataFetcher import BdDataFetcherclass Config(object):    def __init__(self, config_path):        try:            with open(config_path, "r", encoding="utf-8") as yaml_file:                data = yaml.load(yaml_file)                self.excel_path = data['excel_path']                self.sheet_special = data['sheet_special']                self.skip_row = data['date_skip_row']                self.skip_col = data['date_skip_col']                self.max_length = data['max_length']                self.holiday_color = data['holiday_color']                self.workday_color = data['workday_color']                logging.basicConfig(level=logging.DEBUG,                            format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',                            datefmt='%a, %d %b %Y %H:%M:%S')        except Exception as e:            logging.error(repr(e))            sys.exit()class SpecialDay(object):    def __init__(self):        self.is_lunar = False        self.desc = ''class ExcelDateFiller(object):    def __init__(self):        self.data_fetcher = BdDataFetcher()        self.target = os.path.splitext(config.excel_path)[0] + '_out' + os.path.splitext(config.excel_path)[-1]        # try:        #     shutil.copy(config.excel_path, self.target)        # except IOError as e:        #     print("Unable to copy file. %s" % e)        # except:        #     print("Unexpected error:", sys.exc_info())        # self.target_workbook = openpyxl.load_workbook(self.target, data_only=True)    def fill_date_with_openpyxl(self):        for sheet in self.target_workbook.worksheets:            for column_index in range(1, sheet.max_column):                for row_index in range(1, sheet.max_row):                    data = sheet.cell(column=column_index, row=row_index)                    print(data.value)    def read_with_xlrd(self):        workbook = xlrd.open_workbook(self.target)        for sheet in workbook.sheets():            for column_index in range(0, sheet.ncols):                for row_index in range(0, sheet.nrows):                    data = sheet.cell(rowx=row_index, colx=column_index)                    logging.debug('ctype = {}, value = {}, xf_index = {}'.format(data.ctype, data.value, data.xf_index))    def write_with_openpyxl(self):        target_workbook = openpyxl.load_workbook(self.target)        sheet = target_workbook.get_sheet_by_name('sheet_name')        sheet.cell(0, 0).value = 'value'        target_workbook.save()    def write_with_xlwt(self):        workbook = xlrd.open_workbook(self.target)        workbook = xlutils.copy(workbook)        sheet = workbook.get_sheet(0)        sheet.write(0, 0, 'value')        workbook.save()    def load_special_sheet(self):        data = {}        special_sheet = pandas.read_excel(config.excel_path, sheet_name=config.sheet_special, header=0)        for row_index in range(special_sheet.shape[0]):            key = special_sheet.iloc[row_index, 0]            struct_time = pandas.to_datetime(key.timestamp(), unit='s').timetuple()            key = '{}-{}'.format(struct_time.tm_mon, struct_time.tm_mday)            value = SpecialDay()            value.desc = special_sheet.iloc[row_index, 1]            value.is_lunar = special_sheet.iloc[row_index, 2] == '是'            data[key] = value        return data    def fill_date(self):        pandas_workbook = pandas.read_excel(config.excel_path, sheet_name=None, skiprows= config.skip_row, keep_default_na=False)        out_workbook = openpyxl.load_workbook(config.excel_path)        special_day = self.load_special_sheet()        day_data = {}        for sheet_name in pandas_workbook.keys():            if not sheet_name.endswith('月'):                continue            sheet = pandas_workbook.get(sheet_name)            out_sheet = out_workbook.get_sheet_by_name(sheet_name)            nrows = sheet.shape[0]            ncols = sheet.shape[1]            for row_index in range(nrows):                for col_index in range(ncols):                    data = sheet.iloc[row_index, col_index]                    logging.debug('origin row = {}, col = {}, data = {}'.format(row_index, col_index, data))                    if type(data) == Timestamp:                        struct_time = pandas.to_datetime(data.timestamp(), unit='s').timetuple()                        date = '{}-{}-{}'.format(struct_time.tm_year, struct_time.tm_mon, struct_time.tm_mday)                        if not day_data.__contains__(date):                            request_data = self.data_fetcher.request(year_month='{}年{}月'.format(struct_time.tm_year, struct_time.tm_mon))                            day_data.update(request_data)                        temp_row = row_index + 2 + config.skip_row                        temp_col = col_index + 1                         # weekend color                        if day_data[date]['cnDay'] == '六' or day_data[date]['cnDay'] == '日':                            holiday_font = copy(out_sheet.cell(temp_row, temp_col).font)                            holiday_font.color = config.holiday_color                            out_sheet.cell(temp_row, temp_col).font = holiday_font                        # holiday color                        if day_data[date].__contains__('status'):                            if day_data[date]['status'] == '1': # 休假                                holiday_font = copy(out_sheet.cell(temp_row, temp_col).font)                                holiday_font.color = config.holiday_color                                out_sheet.cell(temp_row, temp_col).font = holiday_font                            if day_data[date]['status'] == '2': #班                                workday_font = copy(out_sheet.cell(temp_row, temp_col).font)                                workday_font.color = config.workday_color                                out_sheet.cell(temp_row, temp_col).font = workday_font                        lunar_date = day_data[date]['lDate']                        if lunar_date == '初一':                            lunar_date = '{}月'.format(day_data[date]['lMonth'])                        # logging.debug('date = {}, value = {}'.format(str(date), lunar_date))                        temp_content = ''                        if day_data[date].__contains__('value'):                            temp_content += day_data[date]['value']                            if len(temp_content) > config.max_length:                                temp_content = temp_content[:config.max_length]                        temp_content += '\n'                        temp_content += lunar_date                        # spacial day                        month_day = day_data[date]['month'] + '-' + day_data[date]['day']                        if special_day.__contains__(month_day):                            temp_special_day = special_day.get(month_day)                            if not temp_special_day.is_lunar:                                temp_content += '\n'                                temp_content += temp_special_day.desc                        lunar_month_day = day_data[date]['lunarMonth'] + '-' + day_data[date]['lunarDate']                        if special_day.__contains__(lunar_month_day):                            temp_special_day = special_day.get(lunar_month_day)                            if temp_special_day.is_lunar:                                temp_content += '\n'                                temp_content += temp_special_day.desc                        temp_row = row_index + 3 + config.skip_row                        temp_col = col_index + 1                        out_sheet.cell(temp_row, temp_col).value = temp_content        out_workbook.save(filename=self.target)        out_workbook.close()if __name__ == '__main__':    config = Config(config_path='config.yaml')    date_filler = ExcelDateFiller()    date_filler.fill_date()

感谢各位的阅读!关于“如何使用python自动生成日历”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 如何使用python自动生成日历

本文链接: https://www.lsjlt.com/news/274631.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用python自动生成日历
    这篇文章给大家分享的是有关如何使用python自动生成日历的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设...
    99+
    2023-06-14
  • 用python自动生成日历
    目录效果特点使用手册主要代码完整项目地址效果 在Excel日历模板的基础上,生成带有农历日期、节假日、休班等信息的日历,解决DIY日历最大的技术难题。 图中日期,第一行为公历,第...
    99+
    2024-04-02
  • 利用Python自动化生成爱豆日历详解
    目录1.科普2.爱豆日历3.总结本次内容有感于《Python编程快速上手-让繁琐工作自动化》。 根据书中的「处理Excel电子表格」章节内容,做出一份专属日历。 使用的模块为open...
    99+
    2024-04-02
  • 如何利用Python实现自动生成数据日报
    这篇文章主要讲解了“如何利用Python实现自动生成数据日报”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用Python实现自动生成数据日报”吧!需求详解朋友的需求是这样的,他们平时的...
    99+
    2023-07-02
  • 如何利用Python自动生成PPT
    今天小编给大家分享一下如何利用Python自动生成PPT的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在日常工作中,PPT制...
    99+
    2023-07-02
  • ionic2中如何使用自动生成器
    这篇文章给大家分享的是有关ionic2中如何使用自动生成器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ionic generator是命令行的功能,ionic2自动帮我们创建应...
    99+
    2024-04-02
  • 利用Python实现自动生成数据日报
    目录前言需求详解数据处理前言 人生苦短,快学Python! 日报,是大部分打工人绕不过的难题。 对于管理者来说,日报是事前管理的最好抓手,可以了解团队的氛围和状态。可对于员工来说,那...
    99+
    2024-04-02
  • Python自动化测试如何自动生成测试用例
    本篇文章给大家分享的是有关Python自动化测试如何自动生成测试用例,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。今天,陕西优就业小优整理了一些技术类干货知识,学习软件测试的小...
    99+
    2023-06-02
  • Python如何使用马尔可夫模型自动生成文章
    这篇文章主要介绍“Python如何使用马尔可夫模型自动生成文章”,在日常操作中,相信很多人在Python如何使用马尔可夫模型自动生成文章问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何使用马尔可...
    99+
    2023-06-02
  • 使用MyBatis-Generator如何自动生成映射文件
    目录MyBatis-Generator自动生成映射文件1、使用cmd命令方式生成2、使用maven方式生成3、如果开发工具为eclipse自动生成MyBatis映射文件工具问题MyB...
    99+
    2024-04-02
  • 如何使用Python代码自动生成文献的IEEE引用格式
    小编给大家分享一下如何使用Python代码自动生成文献的IEEE引用格式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用Python写了一个小程序用于根据BibT...
    99+
    2023-06-14
  • python生成器如何使用
    这篇文章主要介绍“python生成器如何使用”,在日常操作中,相信很多人在python生成器如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python生成器如何使用”...
    99+
    2024-04-02
  • 如何用Python自动生成报表以邮件发送
    如何用Python自动生成报表以邮件发送,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数据分析师肯定每天都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的、...
    99+
    2023-06-17
  • pycharm如何自动生成导入
    小编给大家分享一下pycharm如何自动生成导入,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!自动生成导入您正在编写代码,想导入...
    99+
    2024-04-02
  • Python自动生成sql语句
    #!usr/bin/env python # coding=utf-8 def auto_insert_sql(objs, table=None, charset='UTF-8'): """ 自动生成insert...
    99+
    2023-01-31
    自动生成 语句 Python
  • 如何使用Hibernate根据实体类自动生成表
    本篇内容介绍了“如何使用Hibernate根据实体类自动生成表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一种方法这种方法需要配置 hi...
    99+
    2023-07-05
  • IntelliJ IDEA中如何自动生成serialVersionUID
    这篇文章给大家分享的是有关IntelliJ IDEA中如何自动生成serialVersionUID的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。serialVersionUID介绍再编程过程中当涉及到对象的传输问...
    99+
    2023-05-30
    intellij idea serialversionuid
  • webpack如何自动生成html页面
    这篇文章主要为大家展示了“webpack如何自动生成html页面”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“webpack如何自动生成html页面”这篇文章吧...
    99+
    2024-04-02
  • Node.js + imgcook如何自动生成依赖
    本篇内容介绍了“Node.js + imgcook如何自动生成依赖”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • Mybatis如何自动生成sql语句
    目录Mybatis自动生成sql语句Mybatis的动态sql语句if标签的使用where标签的使用foreach标签的使用sql语句的简化编写Mybatis自动生成sql...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作